1.6.5. Python 3.9(2020/10/05)

新特性

  1. 字典合并运算符 ||=

    • 引入了字典合并运算符 ||=,用于合并字典。例如:

      dict1 = {'a': 1, 'b': 2}
      dict2 = {'b': 3, 'c': 4}
      merged_dict = dict1 | dict2
      print(merged_dict)  # 输出: {'a': 1, 'b': 3, 'c': 4}
      
  2. 新增用于移除前缀和后缀的字符串方法

    • 新的字符串方法 str.removeprefix(prefix)str.removesuffix(suffix)

      text = "HelloWorld"
      new_text = text.removeprefix("Hello")
      print(new_text)  # 输出: 'World'
      

3.9.1 中的重要变化

  1. typing.Literal行为更改

    • 用来向类型检查器说明被注解的对象具有与所提供的字面量之一相同的值

    • 注意:Literal 类型不会在运行时强制类型检查,它主要用于类型提示和静态类型检查工具(如 MyPy)

      from typing import Literal
      
      def greet(name: Literal['Alice', 'Bob']) -> None:
         print(f"Hello, {name}!")
      
      greet('Alice')  # 可以通过
      greet('Eve')    # 报错,不在字面量类型范围内
      
    • 如果有某个参数不为 hashable,Literal 对象在相等性比较期间将引发 TypeError

       from typing import Literal
       Literal[{0}]
       Literal[{0}] == Literal[{False}]
       Traceback (most recent call last):
         File "<stdin>", line 1, in <module>
       TypeError: unhashable type: 'set'
      
  2. 增强的 typing 模块

    • typing 模块引入了 Annotated 类型,允许添加额外的元数据到类型注解中。

  3. 新的 importlib.metadata 模块

    • 替代了原来的 importlib.resources,用于访问包的元数据信息。

  4. 装饰器 functools.cache 的改进

    • functools.cache 装饰器现在支持异步函数的缓存。

  5. 多行 f-strings

    • 允许 f-strings 跨多行,增强了多行字符串的格式化功能。

  6. math 模块的改进

    • 引入了 math.prod() 函数,用于计算可迭代对象中所有元素的乘积。

  7. 其它改进和优化

    • 包括语法改进、性能优化以及对标准库的修复和更新。

Python 3.9 带来了许多新特性和改进,进一步提升了语言的功能和易用性,增强了开发者的编程体验。