Python 3.8¶
Python 3.8.0(最终版本)于2019年10月14日发布。3.8的特性在 PEP 569 中定义,有关更改的详细描述可以在 What’s New in Python 3.8. 中找到
特性 |
状态 |
|
Positional-only 参数 |
||
赋值表达式 |
完成 |
|
带外数据的Pickle协议5 |
||
运行时审计挂钩 |
||
Python初始化配置 |
||
Vectorcall: CPython的快速调用协议 |
||
混杂的 |
||
f字符串支持=用于自文档化表达式和调试 |
完成 |
其他语言变化:
一条 continue 语句在 finally 子句中是非法的,因为实现上存在问题。在 Python 3.8 中,这一限制被取消了 |
完成 |
bool、int 和 fractions.Fraction 类型现在有一个 as_integer_ratio() 方法,就像* float* 和 decimal.Decimal 中的那个方法一样 |
|
int、float 和* complex* 的构造函数现在会使用 __index__() 特殊方法,如果该方法可用且对应的 __index__() 、__float__() 或 *__complex__()*方法不可用 |
|
在正则表达式中添加了对 N{name} 转义序列的支持 |
|
字典和字典视图现在可以使用 reversed() 按插入顺序的反向顺序进行迭代 |
|
函数调用中允许的关键字名称的语法进一步被限制。特别是,f((keyword)=arg) 这种写法不再被允许 |
|
在 yield 和 return 语句中,通用的可迭代 unpacking 不再需要括号 |
|
当代码中遗漏逗号,如 [(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*内部封装的协程 |
|
现在可以通过将name关键字参数传递给*asyncio.create_task()*或*create_task()* 事件循环方法,或通过调用任务对象上的 *set_name()*方法来命名Asyncio任务 |
|
为 asyncio.loop.create_connection()*增加了对Happy Eyeballs的支持。为了指定行为,添加了两个新参数: *happy_eyeballs_delay 和interleave。 |
|
get_objects() 现在可以接收一个可选的 generation 参数,该参数指示从哪一代获取对象。(请注意,虽然*gc*是内置的,但 get_objects() 并没有为MicroPython实现) |
|
添加了新的函数*math.dist()* 用于计算两点之间的欧几里德距离 |
|
扩展了 *math.hypot()*函数以处理多个维度 |
|
添加了新函数,math.prod(),作为类似于 sum() 的函数,返回 “start” 值(默认值:1)乘以数字可迭代对象的乘积 |
|
添加了两个新的组合函数*math.perm()*和*math.comb()* |
|
增加了一个新的函数 math.isqrt() ,用于计算精确的整数平方根而不转换为浮点数 |
|
函数 math.factorial() 不再接受非int型的参数 |
完成 |
添加新的*sys.unraisablehook()* 函数,该函数可以被重写以控制如何处理”不可引发的异常” |