Python 3.8¶
Python 3.8.0(最终版)已于 2019 年 10 月 14 日发布。3.8 的特性定义于 PEP 569,变更的详细说明可在 What's New in Python 3.8. 中找到
特性 |
状态 |
|
仅限位置参数 |
||
赋值表达式 |
已完成 |
|
带外数据的 Pickle 协议 5 |
||
运行时审计钩子 |
||
Python 初始化配置 |
||
Vectorcall:面向 CPython 的快速调用协议 |
||
杂项 |
||
f-string 支持用 = 进行自文档化表达式和调试 |
已完成 |
|
其他语言变更:
由于实现上的问题,continue 语句此前在 finally 子句中是非法的。在 Python 3.8 中这一限制被解除了 |
已完成 |
bool、int 和 fractions.Fraction 类型现在拥有 as_integer_ratio() 方法,类似于 float 和 decimal.Decimal 中的方法 |
|
int、float 和 complex 的构造函数现在会使用 __index__() 特殊方法(如果可用),前提是相应的 __int__()、__float__() 或 __complex__() 方法不可用 |
|
新增了对正则表达式中 N{name} 转义的支持 |
|
现在可以使用 reversed() 按相反的插入顺序迭代 dict 及其视图 |
|
对函数调用中关键字名称所允许的语法做了进一步限制。特别是,f((keyword)=arg) 不再被允许 |
|
yield 和 return 语句中的广义可迭代解包不再要求外层括号 |
|
当在诸如 [(10, 20) (30, 40)] 这样的代码中漏掉逗号时,编译器会显示一个带有有用提示的 SyntaxWarning |
|
datetime.date 或 datetime.datetime 的子类与 datetime.timedelta 对象之间的算术运算,现在返回该子类的实例,而不是基类的实例 |
|
当 Python 解释器被 Ctrl-C (SIGINT) 中断且产生的 KeyboardInterrupt 异常未被捕获时,Python 进程现在会通过 SIGINT 信号退出,或以正确的退出码退出,从而使调用进程能够检测到它是因 Ctrl-C 而终止的 |
|
某些高级编程方式需要为现有函数更新 types.CodeType 对象 |
|
对于整数,pow() 函数的三参数形式现在允许在底数与模数互质的情况下指数为负 |
|
字典推导式已与字典字面量保持一致,使得先计算键、后计算值 |
|
object.__reduce__() 方法现在可以返回一个长度为二到六个元素的元组 |
内置模块的变更:
asyncio.run() 已从暂定 API 升级为稳定 API |
已完成 |
运行 python -m asyncio 会启动一个原生异步 REPL |
|
异常 asyncio.CancelledError 现在继承自 BaseException 而非 Exception,并且不再继承自 concurrent.futures.CancelledError |
已完成 |
新增了 asyncio.Task.get_coro(),用于获取 asyncio.Task 内部所包装的协程 |
|
asyncio 任务现在可以命名,方法是向 asyncio.create_task() 或事件循环的 create_task() 方法传递 name 关键字参数,或在任务对象上调用 set_name() 方法 |
|
为 asyncio.loop.create_connection() 新增了对 Happy Eyeballs 的支持。为指定其行为,新增了两个参数:happy_eyeballs_delay 和 interleave。 |
|
get_objects() 现在可以接收一个可选的 generation 参数,指明要从中获取对象的代。(不过请注意,虽然 gc 是内置模块,但 get_objects() 在 MicroPython 中并未实现) |
|
新增了函数 math.dist(),用于计算两点之间的欧几里得距离 |
|
扩展了 math.hypot() 函数以处理多个维度 |
|
新增了函数 math.prod(),作为 sum() 的类似函数,返回一个“起始”值(默认为 1)与一个数字可迭代对象的乘积 |
|
新增了两个组合数函数 math.perm() 和 math.comb() |
|
新增了函数 math.isqrt(),用于在不转换为浮点数的情况下计算精确的整数平方根 |
|
函数 math.factorial() 不再接受非整数类的参数 |
已完成 |
新增了 sys.unraisablehook() 函数,可对其进行重写以控制如何处理“不可抛出的异常” |
|