Python - 短路奇怪的行为

Python - Shortcircuiting strange behaviour

在以下代码片段中,函数 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 True)

例如:

In [15]: a = 0

In [16]: a+=2 and True

In [17]: a
Out[17]: 1

那是因为 f() and False 是一个表达式(从技术上讲是一个单表达式语句),而 a += 1 and False 是一个赋值语句。它实际上解析为 a += (1 and False),并且由于 1 and False 等于 False 并且 False 实际上是整数 0,所以发生的是 a += 0,一个无操作。

然而,

(1 and True) 的计算结果为 True(即整数 1),因此 a += 1 and True 表示 a += 1

(还要注意 Python 的 andor 总是 return 它们的第一个可以明确确定运算结果的操作数)