1.6.6. Python 3.8(2019/10/21)¶
新的语法特性¶
赋值表达式(海象运算符
:=
):引入了一种新的赋值运算符
:=
,也被称为海象运算符,允许在表达式内部进行赋值。例如:if (n := len(some_list)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
位置参数专用语法:
允许在函数定义中使用
/
来指示只能通过位置传递的参数。例如:def func(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): pass
f-string 中的
=
表达式:f-string 现在支持
=
表达式,用于调试时显示表达式的值。例如:x = 10 print(f"{x=}") # 输出: x=10
新增的库和模块¶
增强的
typing
模块:引入了
TypedDict
,允许为字典指定键和值的类型:class Point2D(TypedDict): x: int y: int label: str a: Point2D = {'x': 1, 'y': 2, 'label': 'good'} # OK b: Point2D = {'z': 3, 'label': 'bad'} # Fails type check assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
importlib.metadata
模块:新增了
importlib.metadata
模块,用于访问包的元数据。示例-提取一个已安装软件包的版本号、入口点列表:
>>> from importlib.metadata import version, requires, files >>> version('requests') '2.22.0' >>> list(requires('requests')) ['chardet (<3.1.0,>=3.0.2)'] >>> list(files('requests'))[:5] [PackagePath('requests-2.22.0.dist-info/INSTALLER'), PackagePath('requests-2.22.0.dist-info/LICENSE'), PackagePath('requests-2.22.0.dist-info/METADATA'), PackagePath('requests-2.22.0.dist-info/RECORD'), PackagePath('requests-2.22.0.dist-info/WHEEL')]
性能优化¶
asyncio
asyncio.run() 已经从暂定状态晋级为稳定 API。 此函数可被用于执行一个 coroutine 并返回结果,同时自动管理事件循环
import asyncio async def main(): await asyncio.sleep(0) return 42 asyncio.run(main())
参考¶
https://docs.python.org/zh-cn/3/whatsnew/3.8.html