写点什么

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

  • 2020-02-27
  • 本文字数:3651 字

    阅读完需:约 12 分钟

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

前言

上一周,我在亚马逊 AWS 官方博客发了一篇介绍 Deep Java Library (DJL)一个面向 Java 的深度学习开发库的文章。


没有等来预期的鲜花和掌声,收到的第一个反馈来自一个年轻的业内精英,他的问题居然是 –



只是为了证明尚未老矣仍能饭否,临时起意草就一篇急就章,内容围绕不那么中古的语言 – Python。

Python 3.8

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


col 1col 2col 3col 4
主版本发布日期结束支持日期结束安全修复日期
3.52015-09-132017-08-082020-09-13
3.62016-12-232018-12-242021-12
3.72018-06-272020-06-272023-06
3.82019-10-142021-042024-10
3.92020-10-052022-052025-10

来源: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 的新特性并从最新的改进中获益。


来源: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),因为这个表达式看起来像是海象的眼睛和象牙。具体用法是这样的


col 1col 2
之前现在- 海象运算符


walrus = True


print(walrus) | >>> print(walrus := True)


True


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


  • 仅限位置的形参


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


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


col 1col 2
定义调用


def f(a, b, /, c, d, *, e, f):


print(a, b, c, d, e, f) | f(10, 20, 30, d=40, e=50, f=60)


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


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


col 1col 2
之前现在- 海象运算符


city = “London”

f”Living in {city} is amazing“‘Living in London is amazing‘ | >>> import math


radius = 3.8


f”With a diameter of {( diameter := 2 * radius)}, the circumference is {math.pi * diameter:.2f}”


‘ With a diameter of 7.6 the circumference is 23.88‘


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


在版本 3.8 中,Python 开始支持 System V 风格的共享内存。这种支持允许创建可以在 Python 进程之间共享的内存段,因此有助于在进程之间共享数据时避免(反)序列化的成本。这个变化引入了一个新的管理器 multiprocessing.managers.SharedMemoryManager。该管理器允许基于管理器来访问此共享内存功能。 此外,还引入了一个名为 multiprocessing.shared_memory 的新程序包。 这个程序包包含 SharedMemory 和 ShareableList 类。 前一个类提供对共享内存的“原始”访问,而后一个类则通过将其抽象为 Python 中的列表来提供对共享内存的访问。可以设想,这个特性对于进程间通讯的效率的提升将是显而易见的。


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


_源代码:_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 的程序包。我们只需要用这样一个简单的命令就可以完成安装 –


Python


sudo apt install -y python3.8
复制代码


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


Python


sudo apt install -y python3.8-dev python3.8-venv python3.8-doc
复制代码


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



  • Amazon Linux 2


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



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


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 代码。



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


我应该升级到 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 版本的渐进升级的策略吧。


作者介绍: 费良宏,AWS Principal Developer Advocate。在过去的 20 多年一直从事软件架构、程序开发以及技术推广等领域的工作。他经常在各类技术会议上发表演讲进行分享,他还是多个技术社区的热心参与者。他擅长 Web 领域应用、移动应用以及机器学习等的开发,也从事过多个大型软件项目的设计、开发与项目管理。目前他专注与云计算以及互联网等技术领域,致力于帮助中国的 开发者构建基于云计算的新一代的互联网应用。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/python-3-8-is-here-are-you-ready/


2020-02-27 17:04776

评论

发布
暂无评论
发现更多内容

机器学习之PyTorch和Scikit-Learn第一章 赋予计算机学习数据的能力

Alan

人工智能 机器学习 PyTorch scikit-learn

强化学习是否言过其实?

高端章鱼哥

强化学习 计算机程序

用ChatGPT搞定12 种编程语言:看看它的表现如何

互联网工科生

人工智能 编程语言 ChatGPT

瓴羊QuickBI为什么被称为国内口碑最好的BI工具

夜雨微澜

2023全球数字经济大会召开,天翼云携手产业链共建开放共赢云生态

天翼云开发者社区

云计算

汽车ECU软件开发之应用层软件与底层软件

DevOps和数字孪生

汽车ECU 仿真建模

窥探AI图像安全技术:守护数智时代的无形盾牌与低代码的魔术师

EquatorCoco

AI 低代码 ChatGPT 图像安全

PostgreSQL技术内幕(九)libpq通信协议

酷克数据HashData

什么是从人类反馈中强化学习(RLHF)?

高端章鱼哥

LLM RLHF 大语言模型

基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案

EMQ映云科技

解决方案 工业物联网 sparkplug

对线面试官-Redis 八 | 基于哨兵HA的原理

派大星

Java 面试题

CDN与前端技术

天翼云开发者社区

前端 CDN

社区新手小伙伴测评第二弹 | 使用 ChatGPT 可以帮助完成 IoTDB 的写入和查询吗?

Apache IoTDB

时序数据库 IoTDB Apache IoTDB ChatGPT

详解:为什么瓴羊QuickBI被誉为国内口碑最好的BI工具

巷子

面向Web开发人员的Linux实用入门

互联网工科生

Linux 运维 Web

玩转云端| 天翼云边缘安全加速平台AccessOne实用窍门之多款产品管理难?一站式平台管理全hold住!

天翼云开发者社区

云计算 云平台 边缘安全

数智时代加速!云存储与低代码开发:超强联盟引领技术革新

不在线第一只蜗牛

低代码 云存储

Cilium 流量治理功能与部署实践

谐云

阿里内部 SpringCloud Alibaba(全彩版)开源,P8 大牛纯手打造

采菊东篱下

Java 程序员 微服务

直播 | SDS 容灾方案,让制品数据更安全

CODING DevOps

从Vue到无限可能:数智时代下的低代码快速开发之旅

快乐非自愿限量之名

架构 Vue 低代码 数智化

CentOS7系统更新yum源教程

百度搜索:蓝易云

MySQL Linux centos 运维 yum

RTC+AI|“即智”数智人创新内容生产体验,为企业降本增效再提速

ZEGO即构

数字人 虚拟直播 AI人工智能 数字人短视频 直播间

数智革命下的开发利器:探索云原生技术与低代码的超强结合!

加入高科技仿生人

云原生 低代码

机器学习之PyTorch和Scikit-Learn第2章 为分类训练简单机器学习算法

Alan

人工智能 机器学习 PyTorch scikit-learn 多层感知机

私有化部署这件事儿

高端章鱼哥

低代码 私有化部署 JNPF

敏捷开发流程及项目实战分享

谐云

Python 3.8 已经来了,你准备好了吗?_行业深度_AWS_InfoQ精选文章