Python 3.8

Python 3.8.0(最终版)已于 2019 年 10 月 14 日发布。3.8 的特性定义于 PEP 569,变更的详细说明可在 What's New in Python 3.8. 中找到

特性

状态

PEP 570

仅限位置参数

PEP 572

赋值表达式

已完成

PEP 574

带外数据的 Pickle 协议 5

PEP 578

运行时审计钩子

PEP 587

Python 初始化配置

PEP 590

Vectorcall:面向 CPython 的快速调用协议

杂项

f-string 支持用 = 进行自文档化表达式和调试

已完成

其他语言变更:

由于实现上的问题,continue 语句此前在 finally 子句中是非法的。在 Python 3.8 中这一限制被解除了

已完成

boolintfractions.Fraction 类型现在拥有 as_integer_ratio() 方法,类似于 floatdecimal.Decimal 中的方法

intfloatcomplex 的构造函数现在会使用 __index__() 特殊方法(如果可用),前提是相应的 __int__()__float__()__complex__() 方法不可用

新增了对正则表达式中 N{name} 转义的支持

现在可以使用 reversed() 按相反的插入顺序迭代 dict 及其视图

对函数调用中关键字名称所允许的语法做了进一步限制。特别是,f((keyword)=arg) 不再被允许

yield 和 return 语句中的广义可迭代解包不再要求外层括号

当在诸如 [(10, 20) (30, 40)] 这样的代码中漏掉逗号时,编译器会显示一个带有有用提示的 SyntaxWarning

datetime.datedatetime.datetime 的子类与 datetime.timedelta 对象之间的算术运算,现在返回该子类的实例,而不是基类的实例

当 Python 解释器被 Ctrl-C (SIGINT) 中断且产生的 KeyboardInterrupt 异常未被捕获时,Python 进程现在会通过 SIGINT 信号退出,或以正确的退出码退出,从而使调用进程能够检测到它是因 Ctrl-C 而终止的

某些高级编程方式需要为现有函数更新 types.CodeType 对象

对于整数,pow() 函数的三参数形式现在允许在底数与模数互质的情况下指数为负

字典推导式已与字典字面量保持一致,使得先计算键、后计算值

object.__reduce__() 方法现在可以返回一个长度为二到六个元素的元组

内置模块的变更:

asyncio

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。

gc

get_objects() 现在可以接收一个可选的 generation 参数,指明要从中获取对象的代。(不过请注意,虽然 gc 是内置模块,但 get_objects() 在 MicroPython 中并未实现)

math

新增了函数 math.dist(),用于计算两点之间的欧几里得距离

扩展了 math.hypot() 函数以处理多个维度

新增了函数 math.prod(),作为 sum() 的类似函数,返回一个“起始”值(默认为 1)与一个数字可迭代对象的乘积

新增了两个组合数函数 math.perm()math.comb()

新增了函数 math.isqrt(),用于在不转换为浮点数的情况下计算精确的整数平方根

函数 math.factorial() 不再接受非整数类的参数

已完成

sys

新增了 sys.unraisablehook() 函数,可对其进行重写以控制如何处理“不可抛出的异常”