独家 | Python 3.10发布——你应该知道的五大新特性
作者:Varun Singh
翻译:欧阳锦校对:王可汗本文约1700字,建议阅读5分钟
本文为大家介绍了新版本Python的新特性。
图片来源:Canva——由Varun Singh编辑
我们都知道Python已经流行很长时间了。作为一名Python开发人员,我很高兴与大家分享Python在每一个新版本中不断得到的更新和改进。
Python的最新版本3.10有一些重大改进,接下来我将介绍与这个新版本的Python一起发布的最重大的五项更新。
1. 优化错误信息
这里很重要。对于Python开发者来说,当你编码时遇到了错误,错误信息可以帮助你找出代码中的问题。与以前的Python版本相比,改进后的错误信息可以让这个过程更加轻松。
例如以下代码,其中第二行末尾没有括号:
# I am coding in Python and this is first line ;)
my_list = ["Hello", "Python!"
print(my_list)
在以前的版本——Python3.9和更早的版本中,你会看到如下的报错——
File "my_precious.py", line 3print(my_list)^
SyntaxError: invalid syntax
嗯,无效的语法!现在,作为一个开发者,从这条错误消息中你能理解到什么?就我个人而言,除了在第3行的某个地方添加了一个错误的语法之外,没有任何其他信息。
但是,错误真的出现在第3行吗?
在这种情况下,Python 3.10凭借其最新的更新成为了我的救世主。对于同一段代码,Python 3.10将抛出以下错误信息——
File "my_precious.py", line 2news = ["Hello", "Python!"^
SyntaxError: '[' was never closed
哦吼!行号和非常具体的错误信息让我直接找到并修复错误,继续编程!
这里还有我尝试的另一个例子,看看错误信息是否足够清晰——
# missing_comma.pydc_characters = {1: "Superman" # Comma missing2: "Batman",3: "Joker"
}....
Output:
File "dc_characters.py", line 410: "October"^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
这真的是Python 3.10版本中一个很酷的更新,你可以在评论区留言分享你的想法。
2. 更简单的类型联合语法
typing模块,用于增加静态类型到Python。在过去的 Python 版本中,更多的工具已从typing转换为内置功能,以避免每次都导入静态类型。
现在让我们看看这里到底发生了什么变化——
# Before Python 3.10 Release
from typing import Union
def f(list: List[Union[int, str]], param: Optional[int]):pass# In Python 3.10 Release
def f(list: List[int | str], param: int | None):pass# Calling the function
f([1, “abc”], None)
在 Python 3.10 中,现在您可以使用管道运算符 ( | ) 来指定类型集合,而不是从typing模块中导入Union。
此外,现有的typing.Union和 | 语法应该是等效的,如下比较——
int | str == typing.Union[int, str]typing.Union[int, int] == int
int | int == int
2. 在多行中使用多个`with`语句
Python 确实通过使用反斜杠 ( \ ) 支持多行语句,但是 Python 中的某些结构不应该使用反斜杠来编写多行语句。其中之一是具有多行with( )语句的上下文管理器。例如——
# Before Python 3.10 Releasewith (open("a_really_long_foo") as foo,open("a_really_long_bar") as bar):passTraceback (most recent call last):File "<input>", line 1, in <module>File "demo.py", line 19with (open("a_really_long_foo") as foo,^
SyntaxError: invalid syntax
是的,这看起来不像是一个功能,但它是对以前版本的一个重大改进,因为你可能遇到过使用多行上下文管理器的用例,但由于上述错误而无法执行。
如果还没有明白,让我们举出更多的例子说明在Python 3.10版本中你可以用上下文管理器做什么——
# After Python 3.10 Releasefrom contextlib import contextmanager@contextmanager
def f(x):try:yield xfinally:pass# Example 1
with f('c') as a,f('a') as b:pass# Example 2
with f('c') as a,f('a') as b,f('a') as c:pass
你现在而无需使用反斜杠就可以拥有多行上下文管理器语句,很棒吧?
3. 更好的类型别名
类型别名允许您快速定义可以为复杂类型声明创建的新别名。例如——
# Before Python 3.10
UserInfo = tuple[str, int]
这通常是可行的。然而,类型检查器往往不可能知道这样的语句是一个类型别名还是只是一个常规的全局变量的定义。
# In Python 3.10from typing import TypeAliasCard: TypeAlias = tuple[str, str]
Deck: TypeAlias = list[Card]
上面的 python 代码为tuple[str, str]声明了一个别名UserInfo,因为它是一种组合了多种类型的值的数据类型。在示例中,它是一个字符串和一个整数。此外,添加TypeAlias注释可以向类型检查器和任何阅读该代码的人阐明意图。
4. 更严格的序列压缩
zip( )是Python 中的一个内置函数,你可能在组合多个列表/序列时使用过。Python3.10引入了新的strict参数,它添加了一个运行时测试来检查所有被压缩的序列是否具有相同的长度。
例如——
# Before Python 3.10
names = ["Tom", "Harry", "Jessica", "Robert", "Kevin"]
numbers = ["21024", "75978", "92176", "75192", "34323"]
zip( ) 可以被用来并行地迭代这三个列表:
list(zip(names, numbers)).....
Output:
[(Tom, 21024), (Harry, 75978), (Jessica, 92176), (Robert, 75192), (Kevin, 34323)]
让我们再次使用上面显示的这两个序列的名称和编号。现在,这些序列之间唯一的区别是,数字的长度与序列名称不一样,如下所示——
# Before Python 3.10
names = ["Tom", "Harry", "Jessica", "Robert"] # Kevin is missing
numbers = ["21024", "75978", "92176", "75192", "34323"]# Zipping using zip()
list(zip(names, numbers))......
Output
[(Tom, 21024), (Harry, 75978), (Jessica, 92176), (Robert, 75192)]
注意,所有关于名字——Kevin的信息都消失了!
如果你的数据集比较大,这类错误就很难发现。而且,即使你意识到有问题,也不一定容易解决。
假设被压缩的序列具有相同的长度,就可以帮助你避免这种差异的发生。
在 Python 3.10 中,strict参数可以帮助你在一开始就避免这种情况——
# In Python 3.10
names = ["Tom", "Harry", "Jessica", "Robert"] # Kevin is missing
numbers = ["21024", "75978", "92176", "75192", "34323"]# Zipping using zip() with additional Parameter strict=True
list(zip(names, numbers, strict=True))....
Output:
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: zip() argument 2 is shorter than argument 1
虽然strict并没有真正向zip( )中添加任何新功能,但它可以帮助您避免那些难以发现的错误。
Python 3.10 中的其他更新
此版本有很多错误修复以及其他一些小更新,如果您有兴趣,可以在官方发布页面上找到。
(https://www.python.org/downloads/release/python-3100/)
原文标题:
Python 3.10 Released — Top 5 New Features You should Know
原文链接:
https://varun-singh-01.medium.com/python-3-10-released-top-5-new-features-you-should-know-bf968ac99230
编辑:于腾凯
译者简介
欧阳锦,一名在埃因霍温理工大学就读的硕士生。喜欢数据科学和人工智能相关方向。欢迎不同观点和想法的交流与碰撞,对未知充满好奇,对热爱充满坚持。
翻译组招募信息
工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。
其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~
转载须知
如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。
发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”拥抱组织
独家 | Python 3.10发布——你应该知道的五大新特性相关推荐
- Python 3.10的几个好用的新特性
来源:Deephub Imba本文约1200字,建议阅读5分钟 本文为你介绍Python 3.10新的有用的特性. 3.10版没有添加新的模块,但是引入了很多新的并且有用的特性.让我们来一起看看吧. ...
- range python 3.6 type class_Python 3.6 有什么新特性
匿名用户 1级 2017-07-31 回答 有哪些重要的新特性. 1. 格式化字符串字面量 PEP 498引入了 f-string,一种新型的字符串字面量.中文翻译为"格式化字符串字面量&q ...
- Kotlin 1.3.30 发布,改进性能和引入新特性
开发四年只会写业务代码,分布式高并发都不会还做程序员? Kotlin 1.3.30 已发布,提供的内容包括 JVM 版本的 Kotlin 编译器,以及针对主要平台(Linux,macOS 和 Wi ...
- 对10亿个数据去重java_JAVA 8 新特性
JAVA 8 新特性 一.Lambda 表达式 Consumer Predicate Function Supplier 二.stream 流 1. 获取流 2. 中间操作 1.1)map 把对应的操 ...
- JDK 16 即将发布,迎来重大改变,新特性速览!
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 来源: ...
- 运行orbslam2出现 段错误 (核心已转储)_JDK 14已发布快速预览16个新特性
JDK 14已经于2020年3月17日如期发布.本文介绍JDK 14特性. JEP 305: instanceof的模式匹配(预览) 通过对instanceof运算符进行模式匹配来增强Java编程语言 ...
- CEF新版发布 添加多项激动人心的新特性
CEF(The Chromium Embedded Framework)于2011年2月1日发布了新的181版本,添加了多项激动人心的特性,包括:开发者工具.缩放支持.硬件加速和HTML video的 ...
- Xcode 13 正式版发布,来看看有什么新特性
- python3 列表转字节_Python 3.9!10大新特性值得关注
选自towardsdatascience 作者:Farhad Malik机器之心编译编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数等. ...
最新文章
- 免费获取 Kaspersky Small Office Security 90 天授权
- php中的session机制
- HTML鼠标悬停图片置顶,jquery实现鼠标悬浮停止轮播特效
- oracle 索引invisible,Oracle index unusable和invisible的区别
- Override and Overload (重写和重载)
- 【Python】猜数小游戏
- go 已知有个排序(升序)的数组,要求插入一个元素,最后打印该数组,顺序依然是升序
- (转)The Standard C Library 经典的基础(上)
- tinymce 工具栏 不显示_VBA自动创建outBar式样的工具栏
- 2038年问题 linux内核5.6,Linux Kernel 5.6 开发者已准备好应对 2038 年问题
- fanuc系统md和mf区别_法兰克FANUC加工中心MF系统如何调取机床程序?
- java设置环境变量jre_JRE环境变量配置图解
- 大数据与人工智能方向基础课程简单介绍
- 史上最酷的java音乐播放器,swing编写,炫酷界面
- Hardhat快速上手
- 赞!WEB设计之路!网络视觉艺术发展史概览
- 用例建模指南lt;二gt;
- php如何打开excel文件,如何使用php获取excel文件数据
- 基于注意力机制的深度协同推荐模型
- 可以背在身后的机器人助你一臂之力
热门文章
- mysql表连接算法_如何在MySQL中连接多个表
- 网络拓扑图一般用什么软件画_视频后期一般用什么软件
- mysql 运算符 =,:=,@,@@的含义
- Mac/win eclipse genymotion 插件下载地址
- Spark MLlib实现的中文文本分类–Naive Bayes
- yii权限rbac验证三张表字段说明
- 关于UNION联合体结构的运用
- 使用MASM03 - Win32汇编语言011
- ue4 无限地图_用UE4建出来的虚拟世界精灵岛,比现实世界的美上十倍!
- java一般会写javadoc吗_怎么写javadoc