温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python3.9有哪些新特性

发布时间:2021-07-12 11:17:33 来源:亿速云 阅读:188 作者:chen 栏目:大数据
# Python 3.9有哪些新特性 Python 3.9于2020年10月5日正式发布,作为Python 3.x系列的重要更新版本,它带来了多项语法改进、新功能和性能优化。本文将全面解析Python 3.9的主要新特性,帮助开发者快速掌握这一版本的核心变化。 ## 目录 1. [字典合并与更新运算符](#字典合并与更新运算符) 2. [类型提示的改进](#类型提示的改进) 3. [字符串方法的增强](#字符串方法的增强) 4. [新的解析器:PEG](#新的解析器peg) 5. [模块新增与改进](#模块新增与改进) 6. [性能优化](#性能优化) 7. [其他值得注意的变化](#其他值得注意的变化) 8. [总结](#总结) --- ## 字典合并与更新运算符 Python 3.9引入了两个新的字典运算符 `|` 和 `|=`,使字典操作更加简洁直观。 ### 合并运算符 `|` ```python dict1 = {"a": 1, "b": 2} dict2 = {"b": 3, "c": 4} merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4} 

更新运算符 |=

dict1 = {"a": 1, "b": 2} dict2 = {"b": 3, "c": 4} dict1 |= dict2 # dict1变为 {'a': 1, 'b': 3, 'c': 4} 

优势:相比传统的dict.update(){**d1, **d2}语法,新运算符更符合Python的简洁哲学。


类型提示的改进

Python 3.9对类型注解系统进行了多项增强:

1. 内置集合类型的泛型注解

不再需要从typing模块导入ListDict等类型,直接使用内置类型即可:

def greet_all(names: list[str]) -> None: for name in names: print(f"Hello, {name}") 

2. typing.Annotated 类型

允许添加元数据到类型注解中:

from typing import Annotated def process(data: Annotated[str, "UTF-8 encoded"]) -> None: ... 

3. @typing.cached_property 装饰器

from typing import cached_property class Data: @cached_property def computed_value(self) -> int: return expensive_computation() 

字符串方法的增强

1. removeprefix()removesuffix() 方法

"TestString".removeprefix("Test") # "String" "TestString".removesuffix("String") # "Test" 

2. str.__contains__ 优化

现在str.__contains__对于某些模式(如纯ASCII字符串)有更快的实现。


新的解析器:PEG

Python 3.9引入了基于PEG(Parsing Expression Grammar)的新解析器,取代了传统的LL(1)解析器:

优势

  • 更灵活的语法设计空间
  • 消除了现有语法中的歧义
  • 为未来语法改进奠定基础

影响

虽然对大多数用户透明,但可能影响: - 语言未来的语法演变 - ast模块的细节实现


模块新增与改进

1. zoneinfo 模块

提供对IANA时区数据库的支持:

from zoneinfo import ZoneInfo from datetime import datetime dt = datetime(2020, 10, 5, tzinfo=ZoneInfo("America/New_York")) 

2. graphlib 模块

新增拓扑排序实现:

from graphlib import TopologicalSorter graph = {"A": {"B", "C"}, "B": {"D"}, "C": {"D"}, "D": set()} ts = TopologicalSorter(graph) tuple(ts.static_order()) # ('D', 'B', 'C', 'A') 

3. math 改进

  • math.gcd() 现在支持任意数量的参数
  • 新增math.lcm()计算最小公倍数
  • math.nextafter()math.ulp()函数

4. os 模块

  • os.pidfd_open():Linux专属的进程文件描述符支持

性能优化

Python 3.9在多方面进行了性能提升:

1. 字典优化

  • 更紧凑的字典内存布局
  • 平均减少20%-25%的内存使用

2. 解释器启动加速

  • 通过优化核心模块的导入机制
  • 启动时间减少约10%

3. 方法调用优化

  • 方法调用(如obj.method())现在快约20%

4. 其他优化

  • str(), bytes()int() 的性能提升
  • f-string 的解析优化

其他值得注意的变化

1. __file__ 行为变化

当从zip文件或冻结模块导入时,__file__属性现在会是实际路径而非<frozen>

2. 废弃的功能

  • collections中的抽象基类别名(如collections.Mapping)被标记为废弃
  • random模块的Random.shuffle()不再接受非序列参数

3. 语法警告改进

  • 对可能错误的is比较(如与字面量的比较)发出警告

4. 环境变量处理

  • PYTHONPATH现在影响sys.path的顺序更符合预期

总结

Python 3.9虽然不是革命性的大版本更新,但通过一系列精心设计的改进,显著提升了开发体验和运行效率:

  1. 更优雅的语法:字典运算符、字符串方法等让代码更简洁
  2. 更强的类型系统:为大型项目提供更好的类型支持
  3. 性能提升:从解释器启动到日常操作都有明显加速
  4. 未来准备:PEG解析器为语言未来发展铺平道路

对于新项目,推荐直接使用Python 3.9;对于现有项目,可以评估具体新特性的价值后逐步采用。随着Python生态系统的快速跟进,升级到3.9版本将能享受到更现代、更高效的Python编程体验。

”`

注:本文约2150字,详细介绍了Python 3.9的主要新特性。如需进一步扩展某些部分或添加更多示例代码,可以针对具体使用场景进行补充。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI