Python3.8.0版本在10月14日正式发布,其中包含大量新的特性与优化。
与Python3.7相比,3.8系列的主要新特性(节选部分)有:
PEP,赋值表达式
新的语法(walrusoperator象牙运算符)
:=
可以将值作为表达式的一部分分配给变量:
if(n:=len(a))10:print(fLististoolong({n}elements,expected=10))
PEP,仅位置参数
新语法
/
指示某些函数参数必须按位置指定,不能用作关键字参数,例子:
defpow(x,y,z=None,/):r=x**yifzisnotNone:r%=zreturnr
PEP,Python初始化配置(嵌入的改进)
Python的初始化中添加了一个新的CAPI,从而对整个配置提供一个更好的控制与更优质的错误报告。
PEP,Vectorcall:一种CPython的快速调用协议
Vectorcall协议被添加到Python/CAPI中,它的目的是将已经为各种类进行的现有优化形式化,实现可调用的任何扩展类型都可以使用此协议。
PEP,运行时审核挂钩
PEP,带外数据的Pickle5协议
该PEP建议将新的Pickle协议标准化,并附带发布API以实现协议的充分利用。
拼写相关:PEP
Final
最终变量,PEP
Literal
类型,PEPTypedDict简单类型的命名空间
编译字节码文件的并行文件系统缓存
新的
PYTHONPYCACHEPREFIX
设置(也可用作-X
pycache_prefix
)将隐式字节码缓存配置为使用单独的并行文件系统树,而不是默认值
__pycache__
每个源目录中的子目录。
调试生成与发布生成版本共享ABI
无论是内置的发布模式还是调试模式,Python现在都使用相同的ABI。
f-strings现在支持
=
以便轻松快速地调试
finally:
块中可合法放入
continue
Windows平台中现在默认的
asyncio
异步事件循环现在是
ProactorEventLoop
macOS平台上
multiprocessing
中的spawn开始方法被默认使用
typed_ast合并回CPython
LOAD_GLOBAL
速度提升40%
pickle
现在默认使用第四版协议以提升性能