我正在尝试理解海象赋值运算符。
经典的while循环在循环内部将条件重新分配为False时中断。
x = True
while x:
print('hello')
x = False
为什么使用海豹运算符时这不起作用?它忽略了对x的重新赋值,导致出现无限循环。while x := True:
print('hello')
x = False
我正在尝试理解海象赋值运算符。
经典的while循环在循环内部将条件重新分配为False时中断。
x = True
while x:
print('hello')
x = False
为什么使用海豹运算符时这不起作用?它忽略了对x的重新赋值,导致出现无限循环。while x := True:
print('hello')
x = False
您似乎认为在进入循环之前只会进行一次赋值操作,但事实并非如此。重新赋值发生在检查条件之前,在每次迭代中都会发生。
x := True
将始终为真,无论其他代码如何,这意味着条件将始终计算为真。
:=
只会执行一次,还是与无关问题有关?如果是后者,我几乎觉得这个问题可以“重新定位”,以更好地利用流量。 - Carcigenicate假设我们有一段代码:
>>> 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
x := True
。因此,测试的x
值始终为True
。x = False
没有被忽略。x := True
更改x
的绑定为True
,而不管x
原来绑定到什么。 - Tim Peters