Python 3.9有什么新功能?
字幕组双语原文:Python 3.9有什么新功能?
英语原文:What Are The New Features in Python 3.9?
翻译:雷锋字幕组(Suen)
Python的新版本即将面世。现在是beta版(3.9.0b3),我们很快就会看到python3.9的完整版本。
一些最新的特性令人兴奋,在发布后使用它们将是令人震惊的。我们将讨论以下内容:
-
字典联合运算符
-
类型提示
-
两种新的字符串方法
-
新的Python解析器
这挺酷的,让我们先来看看这些新特性以及如何使用它们。
字典联合
我最喜欢的一个新功能,语法流畅。如果我们有两个字典a和b需要合并,我们现在使用union运算符。
我们有合并运算符 |:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
c = a | bprint(c)
输出:{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
更新运算法 |=,更新原始字典:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= bprint(a)
输出: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
如果字典共享一个公钥,将使用第二个字典的键值对:
a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}print(a | b)
输出:{1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
使用Iterables更新字典
|=运算符的另一个很酷的行为是使用iterable对象(如列表或生成器)用新的键值对更新字典:
a = {'a': 'one', 'b': 'two'}
b = ((i, i**2) for i in range(3))
a |= bprint(a)
输出: {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}
如果我们用标准的union运算符|尝试同样的操作,将输出TypeError,因为它只允许dict类型之间的联合。
类型提示
Python是动态语言,这意味着我们不需要在代码中指定数据类型。
这是可以的,但有时会令人困惑,而且Python的灵活性突然变得比其他任何东西都麻烦。
从3.5开始,我们可以指定类型,但这相当麻烦。这次更新确实改变了这一点,让我们举个例子:
Python 3.9有什么新功能?无类型提示(左) V 有类型提示(右)
在add_int函数中,我们想给它添加相同的数字(出于某种神秘的未定义的原因)。但是我们的编辑器不知道,使用+将两个字符串添加在一起是完全可以的,因此不会提示警告。
我们现在可以做的是将预期的输入类型指定为int。 之后编辑器会立刻报出问题。
我们也可以对包含的类型进行详细说明,例如:
Python 3.9有什么新功能?类型提示用于各处-感谢新语法,看起来更加简洁:
Python 3.9有什么新功能?我们将sum_dict的参数指定为dict,将返回值指定为int。在测试定义期间,我们还确定了它的类型。
字符串方法
虽然没有其他新功能那么吸引人,但仍然值得一提,因为它特别有用。添加了两种用于删除前缀和后缀的新字符串方法:
"Hello world".removeprefix("He")
输出:“llo world”
Hello world".removesuffix("ld"
输出:“Hello wor”
新解析器
这是一个看不见的变化,但有可能成为Python未来发展最重要的变化之一。
Python当前使用的主要是基于LL(1)的语法,而该语法又可以由LL(1)解析器进行解析,该解析器从上到下,从左至右解析代码,提前一个标记。
我几乎不知道这是如何工作的—但是我可以给您介绍一些由于使用这种方法而导致的Python当前的一些问题:
Python包含非LL(1)语法;因此,当前语法的某些部分使用了变通方法,造成了不必要的情况复杂性 。LL(1) 在Python语法中创建限制(没有可能的解决方法)。此问题强调以下代码无法使用当前解析器实现(引发语法错误):
with (open("a_really_long_foo") as foo,
open("a_really_long_bar") as bar): pass
LL(1)在解析器中用左递归中断。这意味着特定的递归语法会导致解析树中出现无限循环。Python的创建者Guido van Rossum解释道
所有这些因素(还有更多我根本无法理解的因素)对Python有一个主要的影响;它们限制了语言的发展。
新的基于PEG的解析器将使Python开发人员具有更大的灵活性,这一点我们将从Python 3.10 onwards 开始注意到。
这就是我们在即将到来的Python3.9中所能期待的一切。如果您真的等不及了,最新的beta版本3.9.0b3 — is available here。
雷锋字幕组是一个由AI爱好者组成的翻译团队,汇聚五五多位志愿者的力量,分享最新的海外AI资讯,交流关于人工智能技术领域的行业转变与技术创新的见解。
团队成员有大数据专家,算法工程师,图像处理工程师,产品经理,产品运营,IT咨询人,在校师生;志愿者们来自IBM,AVL,Adobe,阿里,百度等知名企业,北大,清华,港大,中科院,南卡罗莱纳大学,早稻田大学等海内外高校研究所。
如果,你也是位热爱分享的AI爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。
字幕组招募添加微信:leiphonefansub
备注你的名字+简书
未经授权禁止转载。