以前写 python 的时候,需要考虑到实际运行环境上的 python 版本,或者本身脚本是给别人调用,害怕突然就报一个 'xxt方法不存在' 的错误。不过,最近我看到像 numpy 这些出名库的最新版本,已经最低要求支持python 3.9 了,看来有些"新特性"终于可以放心使用。
今天就来盘点好用新特性
print 函数绝对是我们最熟悉的"朋友",有时候一些小问题就顺手用 print 函数打印一下变量的值。以往都是要这样子写:
糟心!其实我在很久以前就看到关于格式字符串输出变量的特性。
真香!
这不仅仅只是把变量打印出来,而是表达式代码给打印出来,并且还支持格式化语义。比如
原来这个特性就是从 python 3.8 开始支持。现在终于可以放心使用。
名字是有些抽象,不过用起来还是非常直观。
看下面的例子:
以前,由于需要在两个地方使用列表长度的数量,只能在外面定义一个变量。海象运算符可以让我们在判断的同时定义变量
传说, :=
这玩意很像海象的眼睛和长牙。我也说不准,大家来对比一下吧。
不仅仅是判断,其实只要是一些能编写表达式的位置,都可以使用,比如 while 循环
这也是 python 3.8 的特性。
在以前的版本中,字典推导式并非先计算 key ,后计算 value。你可能觉得这玩意有什么大不了的。但是,结合前面介绍的海象运算符就不一样了。因为可以在构建 key 的时候创建变量,在构建 value 的时候使用变量。
下面是官方的例子
这算是一道综合应用题了。个人感觉代码很糟糕,大家看情况选用吧。
这些只是开胃小菜,接下来就是大招了!
functools 是 python 中非常有用的内置库之一,里面有许多超级实用的函数。其他缓存函数是很常用的。以往的版本中,不管是否带参数,都得执行
我以前就是经常忘记到底要不要加括号,现在就不用想。反正都可以就对了
同时,新版本追加了全新的实例内缓存属性装饰器
也就是说,每个实例化的对象都有自己的独立缓存,并且在自身消耗后,缓存也消失。
注意,这些都只是 python 3.8 的更新
python 的类型系统已经越来越成熟(越发离谱~),在 python 3.8 中新增了几个非常重要的类型。
首当其冲就是字面量限定,这对于经常需要自定义通用函数的人来说,是非常有用。以往如果一个函数的参数是有限范围内的几个文本,调用者是无法得知具体可以传入什么玩意
现在只需要定义 Literal 即可得到智能提示。
类似的就是字典的定义,通过 TypedDict 可以明确规定字典的键值
个人感觉比较麻烦,我是很少用。不过,可以想象以后可能会出现一些辅助工具自动生成类型定义。里面的玩法还是很多
最后就是 协议类 Protocol
,这可以说是 python 类型体操的引领者。简单来说,它可以指定某个类型必须得有某些的方法,并且它会细致到参数的名字。
比较神奇,适合需要写通用库的小伙伴,这里不展开说。