本文转载自公众号《核心阅读》(ID:AI_Discovery)。是时候再次发布新版本的Python了。测试版已经上线,完整版将于近期与我们见面。这无疑让技术爱好者们非常兴奋,急切地等待着上手一探究竟。新版本有很多值得期待的新特性。本文将带你先去尝试一下。1.DictionaryMerge这是我最喜欢的新功能之一,它有漂亮的语法。如果有两个字典a和b需要合并,可以使用合并运算符:合并运算符|: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)[Out]:{1:'a',2:'b',3:'c',4:'d',5:'e'}如果字典共享一个公共键(commonkey),使用第二个字典中的键值对:a={1:'a',2:'b',3:'c',6:'inboth'}b={4:'d',5:'e',6:'butdifferent'}print(a|b)[Out]:{1:'a',2:'b',3:'c',6:'butdifferent',4:'d',5:'e'}使用迭代更新字典:|=运算符还可以通过可迭代对象(例如列表或生成器)使用新的键值对更新字典。a={'a':'one','b':'two'}b=((i,i**2)foriinrange(3))a|=bprint(a)[Out]:{'a':'one','b':'two',0:0,1:1,2:4}尝试用标准合并运算符做同样的事情|将引发TypeError因为它只允许字典(dict)类型之间的合并操作。2、string方法的功能看起来“不起眼”,但是非常实用。新版本新增两个字符串去除前缀和后缀的方法:"Helloworld".removeprefix("He")[Out]:"lloworld"Helloworld".removesuffix("ld")[Out]:"Helloworld3.新增parser这是一个看不见的变化,但它有潜力成为Python未来发展中最重要的变化之一。(1)解析器进行解析,使用单个前向标记从上到下、从左到右解析代码。我几乎不知道它是如何工作的,但可以指出Python使用此方法的一些原因:Python包含非LL(1)语法;当前语法的某些部分使用工作区,造成不必要的复杂性。LL(1)在Python语法中造成了限制(没有可用的工作空间)。这个问题强调了以下代码根本无法用当前的解析器实现(抛出语法错误):with(open("a_really_long_foo")asfoo,open("a_really_long_bar")asbar):在解析器中传递LL(1)作为左递归中断。意味着特定含义的递归语法会导致解析树中的无限循环。所有这些因素(以及更多根本不被理解的因素)严重限制了Python语言的发展。而新的基于PEG的解析器将为Python开发人员提供更大的灵活性,人们将从Python3.10开始注意到这一点。4.类型提示Python是动态类型的,这意味着不需要在代码中指定数据类型。这个特性本身没有问题,但有时会让人感到困惑。从Python3.5开始,用户可以指定类型,但是做起来很麻烦。此更新对此进行了更改,例如:无类型提示(左)与3.9中的类型提示(右)add_int函数的目的是将相同的值添加到值本身。但是编辑器并不知道这一点,所以在没有警告的情况下使用+将两个字符串加在一起是完全没问题的。现在可以将预期的输入类型指定为int。有了这个功能,小编就可以第一时间了解问题所在。用户还可以获得有关所涉及类型的非常详细的信息,例如:类型提示可以随处使用,新语法使代码看起来更清晰:将sum_dict的参数指定为字典,将返回值指定为整数。在定义测试时,还要确定它的类型。这些新特性着实让人迫不及待,迫不及待的同学可以先试试最新的Beta版本——3.9.0b3。
