• walrus 操作(3.8以后的功能)

    • a := b
      • 读作:a walrus b
    • 一双眼珠子和獠牙
    • 作用:使得你能够在不允许赋值语句的地方赋值变量

      举个例子

  • 如果你是商人,有人来你这买柠檬

    • 你首先要确定是否柠檬有剩余再考虑卖不卖,能不能卖个好价钱
  • 于是一般的代码形式,下面的代码存在的问题是
    • 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()

  1. <a name="i7nwk"></a>
  2. ## 加入 walrus
  3. ```python
  4. def make_lemonade(count):
  5. print(f'Making {count} lemons into lemonade')
  6. def out_of_stock():
  7. print('Out of stock!')
  8. if count := freash_fruit.get('lemon', 0): # 至少1个苹果
  9. # if (count := fresh_fruit.get('apple', 0)) >= 4: # 至少4个苹果
  10. make_lemonade(count)
  11. else:
  12. out_of_stock()
  • 这样,count 其实 只和 if 有关,与 else 无关。

小结

  • 赋值表达式通过海象操作符(:= )给变量赋值,并且让这个值成为这条表达式的结果,于是,我们可以利用这项特性来缩减代码
  • 如果赋值表达式是大表达式里的一部分,就得用一对括号把它括起来