While 循环中的 Python Walrus 运算符

问题描述 投票:0回答:3

我正在尝试理解海象赋值运算符。

当循环中的条件重新分配为 False 时,经典的 while 循环就会中断。

x = True
while x:
    print('hello')
    x = False

为什么使用 walrus 运算符不起作用? 它忽略 x 的重新分配,从而产生无限循环。

while x := True:
    print('hello')
    x = False
python while-loop python-3.8 control-flow walrus-operator
3个回答
35
投票

您似乎认为该赋值在进入循环之前发生一次,但事实并非如此。重新分配发生在检查条件之前,并且发生在每次迭代

无论任何其他代码如何,

x := True
都将始终为 true,这意味着条件将始终评估为 true。


8
投票

假设我们有一个代码:

>>> a = 'suhail'
>>> while len(a) < 10:
...   print(f"too small {len(a)} elements expected at least 10")
...   a += '1'

赋值表达式有助于避免调用

len
两次:

>>> a = 'suhail'
>>> while (n := len(a)) < 10:
...   print(f"too small {n} elements expected at least 10")
...   a += '1'
... 
too small 6 elements expected at least 10
too small 7 elements expected at least 10
too small 8 elements expected at least 10
too small 9 elements expected at least 10

0
投票

嗯,有一种情况,海象运算符在 while 循环中特别有用,那就是当您不断地促进用户输入时。例如:

while (name:= input("are you John Wick? ")) != "yes":
    print(f"ok {name} you are welcome here")
print("🚶...... oh shoot!")

在此示例中,我们不需要在两个不同的位置为

name
分配值。海象运算符允许我们在一行中分配和测试
name
的值,

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.