Python 3.8的新功能以及是时候升级到Python 2了

2020年已经到来,这意味着Python 2将不再受支持 。 确切地说,主要开发人员已经停止在该分支上工作,而专门针对PyCon US的2.7.18版本2020年4月的发布将标志着与Python 2相关的所有活动的完全停止。


另一方面,最近发布了Python 3.8,为该语言添加了一点语法。 但是, 尚未很快期望使用Python 3.9,但它似乎并未为该语言添加任何有趣的东西。


因此,如果您没有突然放弃Python 2,那么根本就没有意义可言:对第二个版本的支持已经停止,立即过渡到3.8将使您可以长期使用该语言的最新状态。


好了,为了使决策更容易,以下是Python 3.8的主要创新的概述,这对每个python程序员都是有用的。


1.赋值表达式


也称为海象运算符,这是一种新语法,可让您将值分配给另一个表达式内的变量。 这可能是3.8版创新中最著名和讨论最多的内容。


a = 6 #    b  a ** 2 #  ,  b > 0 if (b := a ** 2) > 0: print(f' {a}  {b}.') #  6  36. 

引入运算符的目的是为了提高代码的可读性,因此(像所有其他运算符一样)并不需要立即使用它,而只有在适当时才使用它。


 #     a = 5 d = [b := a+1, a := b-1, a := a*2] 

2.仅位置参数


函数可以采用两种类型的参数。


  • 位置 -按位置传输
  • 命名 -按名称传递

在下面的代码中,参数ab的值都可以通过位置和名称来传递。


 def my_func(a, b=1): return a+b my_func(5,2) #    my_func(a=5, b=2) #    

在新版本的Python中,您可以显式地限制哪些参数只能在位置或仅使用函数签名中的符号/*命名(但是后者在Python 3.8之前出现)。


在下面的示例中,前两个参数ab只是位置, cd可以是任意值,而后两个ef必须被命名。


 def my_func(a, b, /, c, d, *, e, f): return a+b+c+d+e+f my_func(1, 2, 3, 4, 5, 6) # : e, f    my_func(a=1, b=2, 3, 4, e=5, f=6) # : a, b    my_func(1, 2, c=3, 4, e=5, f=6) # returns 21 my_unc(1, 2, c=3, d=4, e=5, f=6) # returns 21 

为什么要限制参数类型的灵活性? 在某些情况下,使用参数名称代替其位置将是无用且不合适的。 如果您打算将来更改位置自变量的名称,该限制还将避免出现问题。


3. f线2.0


用语言很难描述在Python 3.6中出现的f线格式有多么容易和优雅。


很难相信,但是Python 3.8设法使它们更加方便。 通过在要替换的变量的名称之后添加=符号,可以显示其名称和值,而无需重复该名称。


 pi = 3 #        print(f'pi={pi}') #     print(f'{pi=}') #      

使用打印进行调试将更加方便:)


4.字典条目的相反顺序


现在可以使用反向()反向进行字典迭代。


5.从其他模块获取元数据


新的importlib.metadata模块将允许您从第三方程序包中获取元数据(例如,版本)。


6.最后+继续


以前,由于实现此功能的困难,您最终不能在内部使用continue语句。 现在可以了。


 for i in range(2): try: print(i) finally: print('.') continue print('    .') # Python <= 3.7 >> SyntaxError: 'continue' not supported inside 'finally' clause # Python 3.8 >> 0 . 1 . 

Source: https://habr.com/ru/post/zh-CN483276/


All Articles