文档章节

Python 3.8 已经来了,你准备好了吗?

o
 osc_dbf92nqg
发布于 07/01 13:52
字数 2106
阅读 25
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Python 3.8

过去几年,在编程语言领域 Python 可谓大红大紫。开发者对于这门语言的热情也推动了Python 语言的的快速发展。自2015年开始,Python 几乎以每年一个主要版本的速度不断的演进。

v2-7bce27dc36c519c619e1e521d07c9527_b.png

来源:https://en.wikipedia.org/wiki/History_of_Python

就在三个月前,我们注意到在Python 官网上悄然发布了最新的稳定版本Python 3.8。如果只是从数目字来看似乎只有0.1的变化,但如果仔细的阅读PEP文档,还是要不禁为Python 3.8 叫一声好!

Python 3.8 的新特性

说起来这次发布的新版本从2019年夏天就开始就有了测试版本,短短的几个月后在 2019年10月14日第一个官方的稳定版本就已经准备好了。这足以看出Python 社区对这个新版本的热情。而这个稳定的版本的出现,可以让我们即刻就开始使用 Python 的新特性并从最新的改进中获益。


v2-95ede87722d5f0631b8ca854ccea0f01_b.png


来源:https://www.python.org/downloads/release/python-380/

与目前使用最为广泛的Python 3.7对比起来,Python3.8 的变化主要表现在这几个方面 –

  • PEP 572,赋值表达式

  • PEP 570,仅限位置的形参

  • PEP 587,Python 初始化配置(改进的嵌入)

  • PEP 590,Vectorcall:用于 CPython 的快速调用协议

  • PEP 578, Python 运行时审计挂钩

  • PEP 574,具有外部数据缓冲区的 pickle 协议 5

  • 与打字相关:PEP 591(最终限定词)、PEP 586(文字类型)和 PEP 589(TypedDict)

  • 并行文件系统缓存,用于编译的字节码

  • 调试版本使用与发布版本使用相同的 ABI

  • f – 字符串支持的便捷性 = 用于调试的说明符

  • 在finally:块中,continue现在是合法的

  • 在 Windows 上,默认 asyncio 事件循环现在是 ProactorEventLoop

  • 在 macOS 上,spawn 启动方法默认使用 multiprocessing

  • multiprocessing 现在可以使用共享内存段来避免进程之间的pickle开销

  • typed_ast 被合并回了 CPython

  • LOAD_GLOBAL 速度加快了 40%

  • pickle 现在默认使用协议 4,提高了性能

在这些变化当中,给我留下深刻印象的有这样几个特性 –

  • 赋值表达式

Python 3.8 这一次增加了一个新的语法 :=,用来将值赋给一个表达式中的变量。这个新方法也被亲切地称为 “海象运算符” (walrus operator),因为这个表达式看起来像是海象的眼睛和象牙。具体用法是这样的

v2-2159aaf1754d776505b2209a4824487f_b.png

以前,赋值只能以语句形式提供。对于Python 3.8,它可以在列表生成(list comprehensions)和其他表达式上下文中使用。

  • 仅限位置的形参

仅位置参数通过引入新的函数参数语法 “/“ 来指示某些函数参数必须在位置上指定且不能用作关键字参数,从而为库的开发者提供了更多控制权。

在描述API时,可以使用它们更好地表达预期的用法,并允许API以安全,向后兼容的方式发展。 它们还使Python语言与现有文档以及各种“内置”和标准库函数的行为更加一致。

v2-f6b1dc2db9b7ffdc72d04e37c4e5f2c6_b.png

  • 代码调试中支持的 f-string

f-string(或者称为「格式化字符串」)是在 Python 3.6 版本中加入的特性。虽然这一特性非常方便,但是开发者发现 f-string 对调试没有实际的帮助。因此,Eric V. Smith 为 f-string 添加了一些语法结构,使其能够用于调试。于是, Python 3.8增加了在f-string内部使用赋值表达式的能力,需要注意的是f-string是从左到右计算的。

v2-44451343dbaf17d614c22668fd798f45_b.png

  • System V风格共享内存带来的性能的提升

在版本3.8中,Python开始支持System V风格的共享内存。这种支持允许创建可以在Python进程之间共享的内存段,因此有助于在进程之间共享数据时避免(反)序列化的成本。这个变化引入了一个新的管理器multiprocessing.managers.SharedMemoryManager。

该管理器允许基于管理器来访问此共享内存功能。 此外,还引入了一个名为multiprocessing.shared_memory 的新程序包。 这个程序包包含SharedMemory和ShareableList类。

前一个类提供对共享内存的“原始”访问,而后一个类则通过将其抽象为Python中的列表来提供对共享内存的访问。可以设想,这个特性对于进程间通讯的效率的提升将是显而易见的。

如果有兴趣,可以体验一下这段代码带来的两种场景的对比

v2-61d758c2a80228ef6502d47fc0ea438d_b.png

源代码:https://gist.github.com/rvprasad/899ad680b70cfecb81718161798f3862/raw/5719d5a28dd21e871c5a485ec41193bdfef40595/test_mulitprocessing_shared_memory.py

安装 Python 3.8

Python 3.8 已经是一个稳定的版本,并且许多使用广泛的Python 包已经兼容于这个最新的版本。在我初步测试中,无论AWS 的Python 开发包boto3,还是NumPy,Django等等都可以很好的运行于Python 3.8 之上。如果需要自行体验这个最新版本,首先需要的就是在系统中安装Python 3.8。

  • Ubuntu 18.04

在Ubuntu 18.04 官方的“仓库”中已经提供了Python 3.8 的程序包。我们只需要用这样一个简单的命令就可以完成安装 –

sudo apt install -y python3.8

如果考虑到开发中的需要,还可以安装这几个包 –

sudo apt install -y python3.8-dev python3.8-venv python3.8-doc

安装后的Python 版本是这样的 –

v2-e49c05775d1287de586a8c29a60325db_b.png

  • Amazon Linux 2

目前Amazon Linux 2 的官方”仓库” 以及EEPL的“仓库”中都没有提供Python 3.8 的安装包。不得已,我们只能自己动手。不过不用担心,我为大家准备了一个一键安装。安装脚本的内容是这样的 –

v2-05756818f7d3a35c6f5632ab7ef15789_b.png


这个脚本看起来啰嗦,其实完成下载、编译、安装的过程却很快。在我的一台m5a.2xlarge 的实例上,仅仅用了大约28秒的时间就完成了全部过程。安装完成以后,我们就得到了完整的Python3.8 环境,可以让我们尽情体验这些新的特性了。

v2-f9b7ab0a81258ff7fd7cf688bb82755c_b.png

Python 3.8 的另一种玩法 – Amazon Lambda

上面提到的关于Python 3.8 的一切,其实与以往众多的Python新版本别无两样。但是斗转星移,我们今天使用Python 来开发已经远远不止这样的方式。这些新的方法你也许听说过,其中就有大热的AWS Lambda。可以说AWS Lambda 的横空出世,给了应用开发、部署以及管理带来全新的内容。 对于我们今天的话题Python 3.8 来说,AWS Lambda 也给出一种新的选择。

就在Python3.8 发布之后的第35天,Amazon 发布了AWS Lambda 对于Python 3.8的支持。我们可以将Python函数部署到AWS Lambda 上,利用Python 3.8 运行时来执行我们的Python 代码。

v2-a33448c455355247ffc9d50fb4f10452_b.png

在考虑程序的兼容性的前提下,我们可以在众多Python 运行时的环境中进行选择。在程序的稳定性、性能、新特性等之间作出最适当的选择。目前在AWS Lambda 上提供的Python 运行时有这样几个版本 –

v2-6eeee38afd4810339e021085c909b785_b.png

我应该升级到 Python 3.8 吗?

很简单,如果你打算尝试上文介绍的 Python 3.8 的任何新功能,那么就应该升级到 Python 3.8。像 Pyenv 和 Anaconda 这样的工具也可以很容易地安装多个版本的 Python,也包括了Python3.8。或者,你也可以运行官方的 Python 3.8 Docker 容器。这可能是另一个最简便的体验的方式

不过,是否应该将生产环境升级到 Python 3.8 呢?这需要考虑你的项目是否依赖 Python 3.8 的新功能以及程序的兼容性的问题。例如Nvidia 的TensorRT 的Python程序包目前还无法支持Python 3.8 。

至于AWS Lambda,我建议我们首先进行的是兼容性的测试,之后考虑一个周密的升级的计划。当然升级版本以运行 Python 3.8 可以说是非常安全的,而且我们的代码也能利用新版本的特性来进行优化。

考虑到历史上Python2 到Python3 的升级带来的巨大代价,我们还是尽早的开始考虑Python版本的渐进升级的策略吧。



o
粉丝 0
博文 57
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Python 3.8 已经来了,你准备好了吗?

Python 3.8 过去几年,在编程语言领域 Python 可谓大红大紫。开发者对于这门语言的热情也推动了Python 语言的的快速发展。自2015年开始,Python 几乎以每年一个主要版本的速度不断的演进。 ...

wx5ecc6bcb4713c
06/29
0
0
Fedora 31 已经为 Python 3.8 做好了准备

距离 Fedora 30 推出还没有三个月,系统范围内修改的截止日期就已经过去了。Fedora 开发人员正在准备将于11月推出的 Fedora 31 的早期功能计划了。 从 Python 3.7 升级到 Python 3.8,是 Fe...

段段段落
2019/02/15
2.9K
7
如何在 CentOS 8 上安装 Python 3.8

本文最先发布在: https://www.itcoder.tech/posts/how-to-install-python-3-8-on-centos-8/ Python 是世界上被广泛使用的编程语言之一。语法简单易学,Python 是初学者和有工作经验者的一个很...

雪梦科技
04/07
0
0
Python 3.8六大新功能

近期,Python 3.8已经发布。 不过别担心,小芯已经为你总结好了Python 3.8中每个新手都应该掌握的6大新功能。 IT业日新月异,落后的Python 2将在2020年逐渐被淘汰。 2019年,随着数据科学的兴...

老孟的Linux私房菜
03/24
23
0
如何在 Ubuntu 上安装 Python 3.8

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python是世界上使用最广泛的编程语言之一,由于其简单易学的语法,Python是初学者和有经验的开发者的热门选择,Python是一...

linuxprobe2020
06/04
4
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka如何在千万级别时优化JVM GC问题?

大家都知道Kafka是一个高吞吐的消息队列,是大数据场景首选的消息队列,这种场景就意味着发送单位时间消息的量会特别的大,那既然如此巨大的数据量,kafka是如何支撑起如此庞大的数据量的分发...

hummerstudio
06/18
6
0
我打赌!90%程序员都破解不了这个粽子,不信你试!

放假了 各位读者朋友们,马上就是端午小长假啦,开心激动有木有? 新的故事文章还在创作中,写了初稿感觉不太满意又推倒重来。其实写故事还是挺难的,读者可能第一次第二次有新鲜感,写多了就...

轩辕之风
06/24
20
0
如何删库跑路?教你使用Binlog日志恢复误删的MySQL数据

前言 “删库跑路”是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路! 开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文,你能够了解...

后端技术漫谈
01/14
22
0
PHP设计模式之代理模式

PHP设计模式之代理模式 代理人这个职业在中国有另外一个称呼,房产经济人、保险经济人,其实这个职业在国外都是叫做房产代理或者保险代理。顾名思义,就是由他们来帮我们处理这些对我们大部分...

硬核项目经理
2019/09/23
7
0
Redis的复制模式

Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作。 同步 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。 1. 旧版本的执行步骤 从服务器...

osc_s9cni3go
21分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部