关于python版本更新的内容,现在有了一个明确的发行计划,在去年的十月份,python3.10的一些新特性被提出。而今天,我们已经可以安装正式版python来体验这些新特性了。这些新特性包括:类型注释的进一步拓展,延迟类型注释的执行,类型注释联合操作符,带括号的上下文管理器,显式类型别名,加强版的Switch-case(python中叫match-case)语句,更友好的报错提示等。弃用了distutils 等内容。详细的内容可以前往python官网查看相关文档,这里小编主要介绍它是如何对新手更加友好的。
更友好的报错提示
很多编程语言都有一套自己的报错机制,就小编的学习经历而言,python的报错提示是比较友好的。小编学习的第一门语言是C语言,当时使用的是一代经典IDE——visual C++6.0,它在编译的时候如果代码有错误会进行报错,小编觉得vc6.0的报错是十分详细的,我们只需要根据报错的提示信息进行修改,就能把代码改好,VC6.0的优点就在于此:他的代码提示很详细。然而因为它是C语言,所以本身代码会比较难懂,这点不能赖它的报错提示,只能说C语言的报错提示像一把高手才能驾驭的宝剑,对于初学C语言,对C语言语法不够熟悉的小伙伴不太友好。
小编学习的第二门语言是java,java的报错实际上和python很相似,他们的报错都会将调用栈打印出来,我们可以顺着调用栈去一层一层的找到最终错误的地方,python的报错提示也是比较详细的。但是有编译过程的语言有一个共同的缺点:会将所有的错误都报出来。原因在于他们在编译的时候是通篇代码进行编译的,而不是想python一样逐行解释,他们会将整篇代码的错误统统都找出来,如果代码错误较少,这样的报错无伤大雅,但对于新手而言,可能写一个helloworld就能爆出七八个错误,在java里七把个报错打印出来的报错提示可以有一大页,里面还充斥着各种令人看不懂的包,新手看了直接莫名其妙。
接下来就是python,在之前版本的python报错中,其实类似于java,但是他有两点不同。第一,他比较简略,只给出了错误的原因,比如简单的提示语法错误。这对于其他报错来说是一个缺点。第二,由于python逐行解释的特点,就算一篇代码有很多错误,python也只会一个一个的报错,而不是像编译型语言一样一次全部报出来,这点对于报错的易读性而言算是一个优点。
但是今天我们要介绍的,是python3.10,更新后的python报错,解决了之前的缺点,现在python报错也能更加详细了,来看看现在的python报错:
str = "未闭合的str
File "d:\projects\python\learn\Py310探索.py", line 90
str = "未闭合的str
^
SyntaxError: unterminated string literal (detected at line 90)
arr = [1, 2, 2, 3
File "d:\projects\python\learn\Py310探索.py", line 91
arr = [1, 2, 2, 3
^
SyntaxError: '[' was never closed
类型注释
喜欢python的小伙伴有一些是青睐他的动态变量,我们无需声明变量的类型就可以引用,这个变量上一秒还是int型的,下一秒就变成float了,这一切全凭我的意愿。但这实际上会带来两个问题,对于解释器而言,要处理这些动态类型需要解释器去猜测这个变量的类型,在运算的时候好及时转换,这会降低解释器的效率。对于程序员而言,有变量类型的函数我们不需要看函数内部代码就能知道这个函数传进去的参数是什么类型,返回的又是什么类型。而这一点在老版本的python中做不到。老版本的Python中我们需要看完这个函数的代码才能去猜测传入参数和返回值的类型(看起来像是重复解释器遇到的困境,但实际上困扰解释器的问题也困扰着我们),一个函数的代码量如果较少且容易理解,或者带有注释,对我们带来的影响可能没那么大,但当写代码的人不写注释且函数复杂难懂的时候那就是一场灾难。
在新版本的python中来了类型注释,这样可以明显地提高代码的可读性。小编认为这也是提高python易学性的一个关键。
def f(x: int | float) -> float:
return x * 3.142
f(1) # pass
f(1.5) # pass
f('str') # linter will show annotation error
类似上面这样,传入的参数可能是int也可能是float,虽然这部分内容是来自类型注释联合操作符的,但也能看到类型注释相关的内容。
小结
python3.10更新了很多有趣的东西,python也因此变得更加易于学习,现在正是学习python的好时机,小伙伴们赶快来学习python吧