在我的工作当中,无意间接触到了一个别人写的一段代码,像这样:if (n := len(a)) > 10:,凭借我的直觉,我能够轻易的读懂这段代码,但是我却从来没见过,于是我搜了一下,才知道这是python3.8的新语法,叫做海象语法,因为冒号像眼睛,等号像牙齿,所以被成为海象语法。

海象语法

官方给出了几个案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 赋值表达式有助于避免调用 len() 两次
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")

# 一次用于测试是否发生了匹配,另一次用于提取子组
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
discount = float(mo.group(1)) / 100.0

# Loop over fixed length blocks
while (block := f.read(256)) != '':
process(block)

# 其中表达式正文中还需要在筛选条件中计算的值
[clean_name.title() for name in names
if (clean_name := normalize('NFC', name)) in allowed_names]

在原来的python语言当中,需要判断的时候不能够将表达式赋值给变量,因此在进行判断操作之前,必须首先对判断变量进行赋值,而海象运算符使用得当可以极大程度的减少对于冗余代码的使用,免去过多的赋值操作。

总结

该写点什么,还是算吧!