Python 3.9到Python 3.12分别引入的新功能和例子

645 阅读2分钟

Python 3.9:

  • 基于解析表达式语法(PEG)的新解析器,取代了LL(1)解析器,为编写Python代码提供了更多灵活性。
  • 可迭代解包,允许去除嵌套容器。
  • 字典合并(|)和更新(|=)操作符。
  • 新的字符串方法,用于移除前缀(str.removeprefix())和后缀(str.removesuffix())。
  • 类型提示增强,包括types模块中的新标准类型,以支持类型提示(PEP 585)。
  • Zoneinfo模块支持IANA时区数据库。
# 合并字典
dict1 = {'a': 1, 'b': 2} 
dict2 = {'b': 3, 'c': 4} 
merged_dict = dict1 | dict2 print(merged_dict)
# 输出: {'a': 1, 'b': 3, 'c': 4}

截屏2024-02-27 12.02.08.png

Python 3.10:

  • 结构化模式匹配(PEP 634),允许使用新的match语句匹配复杂的数据模式,类似于其他语言中的switch或case语句。
  • traceback中精确且有用的错误信息。
  • 新的语法特性:带括号的上下文管理器,能够在使用多个上下文管理器时编写更清晰的代码。
  • 新的类型注释特性:现在允许在任何表达式中使用函数类型注释,类型别名不再需要通过类型注释或NewType来定义。
# match用法
def http_error(status):
    match status: case 400: return "Bad request" 
        case 404: return "Not found" 
        case 418: return "I'm a teapot" 
        case _: return "Something's wrong with the internet" 
print(http_error(404)) # 输出: Not found

截屏2024-02-27 12.05.02.png

Python 3.11:

  • 由于大量性能提升,代码执行速度更快。
  • 改善的错误信息提供了更好的上下文和更容易的调试。
  • 'Self'类型提示,允许类型检查器标记超类方法未返回子类实例的案例。
  • 异常组和except*语法,以同时处理多个异常,在异步代码情况下非常有益。

截屏2024-02-27 11.51.30.png

Python 3.12:

  • 每个子解释器一个全局解释器锁(GIL),可能会使得多线程Python程序更好地利用多核CPU。
  • 不受垃圾回收影响的永久对象,这在某些情况下可以提高性能。
  • 重写装饰器,可以用来确保一个方法覆盖了超类中的方法。
  • 泛型类的新类型注释语法,提高了清晰度和易用性。

截屏2024-02-27 11.54.10.png