2024年,Python特性的全新体验

发表时间: 2024-02-29 06:30

前言

以前写 python 的时候,需要考虑到实际运行环境上的 python 版本,或者本身脚本是给别人调用,害怕突然就报一个 'xxt方法不存在' 的错误。不过,最近我看到像 numpy 这些出名库的最新版本,已经最低要求支持python 3.9 了,看来有些"新特性"终于可以放心使用。

今天就来盘点好用新特性。


打印变量真香

print 函数绝对是我们最熟悉的"朋友",有时候一些小问题就顺手用 print 函数打印一下变量的值。以往都是要这样子写:

糟心!其实我在很久以前就看到关于格式字符串输出变量的特性。

  • 只需在变量后加一个等号即可

真香!

这不仅仅只是把变量打印出来,而是表达式代码给打印出来,并且还支持格式化语义。比如

原来这个特性就是从 python 3.8 开始支持。现在终于可以放心使用。


海象运算符?

名字是有些抽象,不过用起来还是非常直观。

看下面的例子:

以前,由于需要在两个地方使用列表长度的数量,只能在外面定义一个变量。海象运算符可以让我们在判断的同时定义变量

传说, := 这玩意很像海象的眼睛和长牙。我也说不准,大家来对比一下吧。

不仅仅是判断,其实只要是一些能编写表达式的位置,都可以使用,比如 while 循环

这也是 python 3.8 的特性。


字典推导式计算顺序

在以前的版本中,字典推导式并非先计算 key ,后计算 value。你可能觉得这玩意有什么大不了的。但是,结合前面介绍的海象运算符就不一样了。因为可以在构建 key 的时候创建变量,在构建 value 的时候使用变量。

下面是官方的例子

这算是一道综合应用题了。个人感觉代码很糟糕,大家看情况选用吧。

这些只是开胃小菜,接下来就是大招了!


工具库 functools 大升级

functools 是 python 中非常有用的内置库之一,里面有许多超级实用的函数。其他缓存函数是很常用的。以往的版本中,不管是否带参数,都得执行

  • 注意它必需得到调用,所以后面必需有括号

我以前就是经常忘记到底要不要加括号,现在就不用想。反正都可以就对了

同时,新版本追加了全新的实例内缓存属性装饰器

  • 可以看到,两个对象各自执行了两次 num 属性,但是实际属性函数只执行了一次,第18行代码调用获取的是缓存值

也就是说,每个实例化的对象都有自己的独立缓存,并且在自身消耗后,缓存也消失。

注意,这些都只是 python 3.8 的更新


智能提示相关

python 的类型系统已经越来越成熟(有点越发离谱~),在 python 3.8 中新增了几个非常重要的类型。

首当其冲就是字面量限定,这对于经常需要自定义通用函数的人来说,是非常有用。 以往如果一个函数的参数是有限范围内的几个文本,调用者是无法得知具体可以传入什么玩意

  • 一点提示都没有

现在只需要定义 Literal 即可得到智能提示。

类似的就是字典的定义,通过 TypedDict 可以明确规定字典的键值

个人感觉比较麻烦,我是很少用。不过,可以想象以后可能会出现一些辅助工具自动生成类型定义。里面的玩法还是很多

最后就是 协议类 Protocol ,这可以说是 python 类型体操的引领者。简单来说,它可以指定某个类型必需得有某些的方法,并且它会细致到参数的名字。

比较神奇,适合需要写通用库的小伙伴,这里不展开说。


不要忘记一键三连。你的点赞、收藏、关注,是我创作的动力。