从功能强大的新赋值语法到底层大变动,Python 3.8 迈向更现代的 Python。

作者 | Serdar Yegulalp
译者 | 弯月,责编 | 屠敏
Python 3.8是Python语言的最新版本,它适合用于编写指令码、自动化以及机器学习和Web开发等各种任务。现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变、内存共享、更有效的序列化和反序列化、改进的字典和更多新功能。
Python 3.8还引入了许多效能改进。总的来说,我们即将拥有一个更快、更精确、更一致和更现代的Python。下面是Python 3.8的新功能和最重要的改变。
赋值表示式
Python 3.8最明显的变化就是赋值表示式,即:=操作符。赋值表示式可以讲一个值赋给一个变数,即使变数不存在也可以。它可以用在表示式中,无需作为单独的语句出现。
while(line := file.readline) != "end":
print(chunk)
上例中,如果变数line不存在则会被建立,然后将file.readline的返回值赋给它。然后检查line是否为"end"。如果不是,则读取下一行,储存在line中,然后继续测试。
赋值表示式遵循了Python一贯简洁的传统,就像列表解析式一样。其目的在于避免在特定的Python程式设计模式中出现一些枯燥的样板程式码。例如,上述程式码用一般写法需要多写两行程式码。
仅通过位置指定的引数是函式定义中的一个新语法,可以让程序员强迫某个引数只能通过位置来指定。这样可以解决Python函式定义中哪个引数是位置引数、哪个引数是关键字引数的模糊性。
仅通过位置指定的引数可以用于如下情况:某个函式接受任意关键字引数,但也能接受一个或多个未知引数。Python的内建函式通常都是这种情况,所以允许程序员这样做,能增强Python语言的一致性。
Python档案中给出的例子如下:
defpow(x, y, z=None, /):
r = x**y
ifz isnotNone:
r %= z
returnr
符号 / 分隔了位置引数和关键字引数。在这个例子中,所有引数都是未知引数。在以前版本的Python中,z会被认为是关键字引数。但采用上述函式定义,pow(2, 10)和pow(2, 10, 5)都是正确的呼叫方式,而pow(2, 10, z=5)是不正确的。
支援f字串除错
f字串格式可以更方便地在同一个表示式内进行输出文字和值或变数的计算,而且效率更高。
x = 3
print( f\'{x+1}\')
输出4。
在f字串表示式末未新增=可以输出f表示式本身的值,后面是计算后的值
x = 3
print( f\'{x+1=}\')
输出为x+1=4。
在Python 3.8中,multiprocessing模组提供了SharedMemory类,可以在不同的Python进城之间建立共享的内存区域。
在旧版本的Python中,程式间共享资料只能通过写入档案、通过网络套接字传送,或采用Python的pickle模组进行序列化等方式。共享内存提供了程式间传递资料的更快的方式,从而使得Python的多处理器和多核心程式设计更有效率。
共享内存片段可以作为单纯的字节区域来分配,也可以作为不可修改的类似于列表的物件来分配,其中能储存数字型别、字串、字节物件、None物件等一小部分Python物件。
Typing模组的改进
Python是动态型别语言,但可以通过typing模组新增型别提示,以便第三方工具验证Python程式码。Python 3.8给typing添加了一些新元素,因此它能够支援更健壮的检查:
新版本的pickle协议
Python的pickle模组提供了一种序列化和反序列化Python资料结构或例项的方法,可以将字典原样储存下来供以后读取。不同版本的Python支援的pickle协议不同,而最新版本的支援范围更广、更强大、更有效的序列化。
Python 3.8引入的第5版pickle协议可以用一种新方法pickle物件,它能支援Python的缓冲区协议,如bytes、memoryviews或Numpy array等。新的pickle避免了许多在pickle这些物件时的内存复制操作。
NumPy、Apache Arrow等外部库在各自的Python系结中支援新的pickle协议。新的pickle也可以作为Python 3.6和3.7的外挂使用,可以从PyPI上安装。
Python3.6中重写了字典,其使用了PyPy专案贡献的一个新实现。除了更快、更紧凑之外,现在的字典还会继承元素的顺序——元素会按照新增的顺序排列,就像列表一样。Python 3.8还允许在字典上使用reversed。
Python C API和CPython实现
Python最近的版本在CPython(C语言编写的Python的参考实现)中使用的C API重构方面下了很大功夫。到目前为止这些工作还在不断新增,现有的成果包括:
如何下载Python 3.8
请点选下方连结,从Python 软件基金会下载Python 3.8 beta版:
原文:https://www.infoworld.com/article/3400640/the-best-new-features-in-python-38.html?upd=1560521475943
点选阅读原文,立刻报名 5G 沙龙。





























