walrus 操作(3.8以后的功能)
如果你是商人,有人来你这买柠檬
- 你首先要确定是否柠檬有剩余,再考虑卖不卖,能不能卖个好价钱
- 于是一般的代码形式,下面的代码存在的问题是
- count 变量只在第一个 if 语句中使用,但实际情况下好似 count 很重要
- 实际并不是这样 ```python fresh_fruit = { ‘apple’: 10, ‘banana’: 8, ‘lemon’: 5, }
def make_lemonade(count): print(f’Making {count} lemons into lemonade’)
def out_of_stock(): print(‘Out of stock!’)
count = freash_fruit.get(‘lemon’, 0) if count: make_lemonade(count) else: out_of_stock()
<a name="i7nwk"></a>
## 加入 walrus
```python
def make_lemonade(count):
print(f'Making {count} lemons into lemonade')
def out_of_stock():
print('Out of stock!')
if count := freash_fruit.get('lemon', 0): # 至少1个苹果
# if (count := fresh_fruit.get('apple', 0)) >= 4: # 至少4个苹果
make_lemonade(count)
else:
out_of_stock()
- 这样,count 其实 只和 if 有关,与 else 无关。
小结
- 赋值表达式通过海象操作符(:= )给变量赋值,并且让这个值成为这条表达式的结果,于是,我们可以利用这项特性来缩减代码。
- 如果赋值表达式是大表达式里的一部分,就得用一对括号把它括起来。