众所周知,编程语言隔一段时间就会有新的版本发布,今天要介绍的是关于Python的新版本即将发布的信息。现在处于beta(3.9.0b3)中,我们很快将看到Python 3.9 的完整版本。一些最新功能令人难以置信,看到Python 3.9 在发布后会被使用。我们将看到以下新功能,即字典联合运算符、类型提示、两种新的字符串方法、新的Python解析器 。下面让我们首先看一下这些新功能以及我们如何使用这些功能。
词典联盟
我最喜欢的新功能之一,具有优美的语法。如果我们有两个字典a和b需要合并,我们现在使用并运算符。
我们有合并运算符|:
a={1:'a',2:'b',3:'c'}
b={4:'d',5:'e'}
c=a|b
print(c)
[输出]:{1:“a”,2:“b”,3:“c”,4:“d”,5:“e”}
还有更新运算符|=,它将更新原始字典:
a={1:'a',2:'b',3:'c'}
b={4:'d',5:'e'}
a|=b
print(a)
[输出]:{1:“a”,2:“b”,3:“c”,4:“d”,5:“e”}
如果我们的词典共享一个公共键,那么将使用第二个词典中的键值对:
a={1:'a',2:'b',3:'c',6:'inboth'}
b={4:'d',5:'e',6:'butdifferent'}
print(a|b)
[输出]:{1:“a”,2:“b”,3:“c”,6:“但与众不同”,4:“d”,5:“e”}
使用Iterables进行字典更新
|=运算符的另一个很酷的行为是能够使用可迭代对象使用新的键值对更新字典:
a={'a':'one','b':'two'}
b=((i,i**2)foriinrange(3))
a|=b
print(a)
[输出]:{'a':'one','b':'two',0:0、1:1、2:4}
如果我们对标准联合运算符尝试相同的操作|我们将收到TypeError,因为它将仅允许dict类型之间的并集。
类型提示
Python是动态类型的,这意味着我们无需在代码中指定数据类型。
没关系,但有时可能会造成混淆,突然之间,Python的灵活性比其他任何事情都变得更加令人讨厌。
从3.5开始,我们可以指定类型,但是非常麻烦。此更新确实改变了这一点,让我们使用一个示例:
在我们的add_int函数中,我们显然想为其自身添加相同的数字。但是我们的编辑器并不知道,并且完全可以使用+将两个字符串加在一起-因此不会发出警告。
现在,我们可以将期望的输入类型指定为int。使用此功能,我们的编辑人员可以立即了解问题。
我们也可以非常详细地了解所包含的类型,例如:
类型提示可以在任何地方使用-由于有了新的语法,现在它看起来更加简洁:
我们将sum_dict的参数指定为dict,并将返回值指定为int。在测试定义期间,我们还将确定其类型。
字符串方法
虽然不像其他新功能那么迷人,但是仍然值得一提,因为它特别有用。添加了两个用于删除前缀和后缀的新字符串方法:
"Helloworld".removeprefix("He")
[出]:“llo世界”
Helloworld".removesuffix("ld")
[出]:“你好,我很担心”
新解析器
这更多是视线之外的更改,但有可能成为Python未来发展中最重大的更改之一。
Python当前使用的主要是基于LL1的语法,而该语法又可以由LL1解析器进行解析,该解析器从上到下,从左至右解析代码,而前瞻性仅为一个标记。
现在,我几乎不知道它是如何工作的,但是由于使用了这种方法,因此我可以为您介绍Python中的一些当前问题:
Python包含非LL1语法;因此,当前语法的某些部分使用了变通方法,从而造成了不必要的复杂性。LL1在Python语法中产生了限制。该问题突出表明,以下代码根本无法使用当前解析器实现:
with(open("a_really_long_foo")asfoo,
open("a_really_long_bar")asbar):
Python
LL1在解析器中以左递归中断。意味着特定的递归语法可能导致解析树中的无限循环。Python的创建者GuidovanRossum解释说
所有这些因素对Python产生了重大影响。它们限制了语言的发展。
基于PEG的新解析器将为Python开发人员提供更大的灵活性,从Python3.10起我们将开始注意到这一点。
这就是我们即将推出的Python3.9所期待的一切。如果您实在迫不及待,可以在此处获取最新的Beta版本-3.9.0b3。
上述就是关于Python3.9的新功能是什么的全部内容介绍,想了解更多关于Python的信息,请继续关注中培教育。