Python 3.10 关键新特性

Python 3.10 于 2021-10-04 发布,至今已大半年,目前 AWS 的 Lambda 尚未直接支持,但用 Docker 镜像的方式使用 AWS Lambda 是可以使用 Python 3.10。Python 一年一发布的节奏比 Java LTS 还紧密。下一个版本 Python 3.11 预计在 2022-10-03 发布。在学习 Python 3.10 之前先回顾一下 Python 3.7, 3.8, 3.9 的特性(不想关心之前版本的变迁可直接跳跃到下方的 Python 3.10 新特性去)

Python 3.7 所带来的新特性

  1. breakpoint()
  2. 数据类(@dataclass)
  3. 类型提示强化和延迟注解求值
  4. 时间精度的提高
  5. 保证字典的顺序
  6. async 和 await 成为关键字
  7. asyncio.run() 简化事件循环
  8. 上下文变量(ContextVar) - 可实现 ThreadLocal 和 SLF4J 的 MDC 功能

阅读全文 >>

Python 中泛型的实现

在学习 Python 3.10 新特性时,其中有个类型别名(TypeAlias), 所举的例子是

StrCache = 'Cache[str]' # a type alias
LOG_PREFIX = 'LOG[DEBUG]' # a module constant

可写成

StrCache: TypeAlias = 'Cache[str]' # a type alias
LOG_PREFIX = 'LOG[DEBUG]' # a module constant

这让 StrCache 更像是一个类型别名,而不是一个看起来明显就是 Cache[str] 的字符串变量(实际上它确实是)。

本文不在 TypeAlias 本身,而是从 Cache[str] 能看出 Python 似乎也能支持像 Java 那样的泛型, 就像 Python 内置支持的 List[str] 或 list[str] 那样。

那么来看 Python 怎么去实现一个只能放入字符串的  Cache[str] Cache, 而不能放入别的类型。 阅读全文 >>

Python 函数重载实现

Python 不支持函数重载,在同一个模块中声明同名方法不会报错,只会不停的覆盖,无论参数个数是否不同,最终只会保留最后一个函数

输出 阅读全文 >>