Python3.8 新特性

海象运算符

我期待很久的特性,可以在表达式内赋值

先前的写法:

if len(a) > 10:
    print(f'{len(a)}')

现在的写法:

if n := len(a) > 10:
        print(f'{n}')

明显减少了一次 len()函数的调用,当然可读性会稍有下降。

仅限位置形参

def foo(a, b, /, c):
    # do something

形参位置的“/”前为仅限位置形参,后为关键字形参。

所谓仅限位置形参,就是你不能通过指定关键字去给它赋值。

假设我们常用的 sort()函数的形参全为仅限位置形参,那么下面这种写法是错的

sort([1,2,3], reverse=True) # THIS IS WRONG

目前来看,比较有用的地方是:

  • 让函数的调用不那么呆萌(?)
  • 在使用 kwargs 时可以保证 kwargs 中 key 的任意性(即便 key 与仅限位置形参重名也能被处理)

指定字节码缓存的位置

简单地说就是以前生成在__pycache__文件夹的缓存文件可以换地方放了,详细地自己戳小标题的链接看吧。

import sys
sys.pycache_prefix = 'path_you_want_to_add'

统一调试构建和发布构建的ABI

是的,我看不懂

f-string增强

形式为 f'{expr=}' 的 f-字符串将扩展表示为表达式文本

slogan = u'我很酷'
f'{slogan=}'

# output: "slogan='我很酷'"

= 说明符将输出整个表达式,以便详细演示计算过程

pickle变快了

当使用 pickle 在 Python 进程间传输大量数据以充分发挥多核或多机处理的优势时,非常重要一点是通过减少内存拷贝来优化传输效率,并可能应用一些定制技巧例如针对特定数据的压缩。

有一个特性将在3.9完全公开,略过;

所有的提案都略过;

其他语言特性修改略过。