Python-短路奇怪的行为
在以下代码片段中,函数Python-短路奇怪的行为,python,short-circuiting,Python,Short Circuiting,在以下代码片段中,函数f按预期执行: def f(): print('hi') f() and False #Output: 'hi' 但在以下类似的代码片段中,a不会增加: a=0 a+=1 and False a #Output: 0 但是如果我们用True而不是False短路a会增加: a=0 a+=1 and True a #Output: 1 短路是如何工作的?我相信 a+=1 and False 相当于 a+=(1 and False) a+=(1 and True)
f
按预期执行:
def f():
print('hi')
f() and False
#Output: 'hi'
但在以下类似的代码片段中,a
不会增加:
a=0
a+=1 and False
a
#Output: 0
但是如果我们用True而不是False短路a
会增加:
a=0
a+=1 and True
a
#Output: 1
短路是如何工作的?我相信
a+=1 and False
相当于
a+=(1 and False)
a+=(1 and True)
及
相当于
a+=(1 and False)
a+=(1 and True)
例如:
In [15]: a = 0
In [16]: a+=2 and True
In [17]: a
Out[17]: 1
这是因为f()和False
是一个表达式(技术上是一个表达式语句),而a+=1和False
是一个赋值语句。它实际上解析为a+=(1和False)
,由于1和False
等于False
,而False
实际上是整数0,所以发生的是a+=0
,不可操作
(1和True)
的计算结果为True
(即整数1),因此a+=1和True
表示a+=1
(还要注意Python的
和和或总是返回它们的第一个操作数,可以明确地确定运算结果)是的,就是这样。在python中,赋值不返回C中的值。可能需要澄清“(1和True)
的计算结果为True
,它是整数1。“不应该a+=1和False
解析为a=(a+1)和False
,因为+
操作符将整个表达式解析为a=False
?否,因为+=
不是运算符,所以它是赋值指令(语句,不是表达式)。假设\uu iadd\uu
未被覆盖,a+=b
首先计算a
,然后计算b
,然后将两者相加,并将结果重新分配到a
。