Python 3.8 新功能大揭秘
发布日期:2021-07-01 03:58:58 浏览次数:2 分类:技术文章

本文共 2471 字,大约阅读时间需要 8 分钟。

 

点击上方民工哥技术之路选择“置顶或星标”

每天10点为你分享不一样的干货

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

640?wx_fmt=jpeg

Python 3.8是Python语言的最新版本,它适合用于编写脚本、自动化以及机器学习和Web开发等各种任务。现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变、内存共享、更有效的序列化和反序列化、改进的字典和更多新功能。

Python 3.8还引入了许多性能改进。总的来说,我们即将拥有一个更快、更精确、更一致和更现代的Python。下面是Python 3.8的新功能和最重要的改变。

1、赋值表达式

Python 3.8最明显的变化就是赋值表达式,即:=操作符。赋值表达式可以讲一个值赋给一个变量,即使变量不存在也可以。它可以用在表达式中,无需作为单独的语句出现。

while (line := file.readline()) != "end":    print(chunk)"end":     print(chunk)

上例中,如果变量line不存在则会被创建,然后将file.readline()的返回值赋给它。然后检查line是否为"end"。如果不是,则读取下一行,保存在line中,然后继续测试。

赋值表达式遵循了Python一贯简洁的传统,就像列表解析式一样。其目的在于避免在特定的Python编程模式中出现一些枯燥的样板代码。例如,上述代码用一般写法需要多写两行代码。

2、仅通过位置指定的参数

仅通过位置指定的参数是函数定义中的一个新语法,可以让程序员强迫某个参数只能通过位置来指定。这样可以解决Python函数定义中哪个参数是位置参数、哪个参数是关键字参数的模糊性。

仅通过位置指定的参数可以用于如下情况:某个函数接受任意关键字参数,但也能接受一个或多个未知参数。Python的内置函数通常都是这种情况,所以允许程序员这样做,能增强Python语言的一致性。

Python文档中给出的例子如下:

 
def pow(x, y, z=None, /):    r = x**y    if z is not None:        r %= z    return r     r = x**y     if z is not None:         r %= z     return r

符号 / 分隔了位置参数和关键字参数。在这个例子中,所有参数都是未知参数。在以前版本的Python中,z会被认为是关键字参数。但采用上述函数定义,pow(2, 10)和pow(2, 10, 5)都是正确的调用方式,而pow(2, 10, z=5)是不正确的。

3、支持f字符串调试

f字符串格式可以更方便地在同一个表达式内进行输出文本和值或变量的计算,而且效率更高。

 
x = 3 print(f'{x+1}') print(f'{x+1}')

输出4。

在f字符串表达式末未添加=可以输出f表达式本身的值,后面是计算后的值

 
x = 3print (f'{x+1=}') print (f'{x+1=}')

输出为x+1=4。

4、多进程共享内存

在Python 3.8中,multiprocessing模块提供了SharedMemory类,可以在不同的Python进程之间创建共享的内存区域。

在旧版本的Python中,进程间共享数据只能通过写入文件、通过网络套接字发送,或采用Python的pickle模块进行序列化等方式。共享内存提供了进程间传递数据的更快的方式,从而使得Python的多处理器和多内核编程更有效率。

共享内存片段可以作为单纯的字节区域来分配,也可以作为不可修改的类似于列表的对象来分配,其中能保存数字类型、字符串、字节对象、None对象等一小部分Python对象。

5、Typing模块的改进

Python是动态类型语言,但可以通过typing模块添加类型提示,以便第三方工具验证Python代码。Python 3.8给typing添加了一些新元素,因此它能够支持更健壮的检查:

6、新版本的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上安装。

7、可反转字典

Python3.6中重写了字典,其使用了PyPy项目贡献的一个新实现。除了更快、更紧凑之外,现在的字典还会继承元素的顺序——元素会按照添加的顺序排列,就像列表一样。Python 3.8还允许在字典上使用reversed()。

8、性能改进

9、Python C API和CPython实现

Python最近的版本在CPython(C语言编写的Python的参考实现)中使用的C API重构方面下了很大功夫。到目前为止这些工作还在不断添加,现有的成果包括:

END

关注民工哥技术之路微信公众号,在后台回复关键字:1024 或者 2048,可以获取一份最新整理的技术干货。

- MORE | 往期精彩文章 -

长按二维码关注民工哥技术之路

640?

公众号后台回复「目录」可以查看公众号文章目录大全,回复加群可以加入读者技术交流群,与大家一起交流。

点击【阅读原文】公众号所有的精华都在这

你点一个在看 ?

 就是最大的支持640?wx_fmt=gif

转载地址:https://mingongge.blog.csdn.net/article/details/97203305 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:震惊,用了这么多年的 CPU 利用率,其实是错的
下一篇:慌的一批!新手妹子一个命令把公司服务器数据删没了...

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月10日 02时18分26秒