1. 简介
Python 3.8
引入了 PEP 572 中描述的新特性——赋值表达式,该语法由 Emily Morehouse 实现。没错,就是下面这个妹子。
2. 语法与语义
赋值表达式,这是 PEP 572
标题中使用的官方正式名称,英文是 Assignment Expressions
。也可以称作具名表达式,英文是 Named Expressions
。它涉及到的新操作符 :=
被亲切地称作海象运算符,英文是 the walrus operator
,因为冒号 :
像是海象的一对小眼睛,等号 =
像是海象的一对长牙。
赋值表达式的语法是 NAME := expr
,顾名思义,它完成了两个操作:
- 计算表达式
expr
的结果 - 把结果赋值给名为
NAME
的变量
注意:
- 在大多数
Python
表达式可以出现的上下文中,都可以使用赋值表达式。一些例外情况在PEP 572
中有所提及,刚开始使用不用在意,大体准则是不要在没有必要或者影响代码可读性的时候使用赋值表达式。 - 变量名
NAME
是有效的Python
标识符,表达式expr
可以是除了不带括号的元组以外的任意合法Python
表达式。 - 赋值表达式的值与它包含的表达式
expr
的值是一样的,同时还会把该值赋给NAME
。
3. 作用与案例
先来看一个最简单的:
>>> walrus = False
>>> print(walrus)
False
>>> print(walrus := True)
True
>>> walrus
True
可见 print(walrus := True)
一句话,做了两句话的工作:
walrus = True
print(walrus)
你想直接写成 print(walrus = True)
?在 Python
中是不行的:
>>> print