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