Python - 短路的奇怪行为

时间:2016-03-29 15:58:14

标签: 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

短路是如何以这种方式运行的?

2 个答案:

答案 0 :(得分:8)

那是因为PUSH WORD PTR [chr]是一个表达式(技术上是单表达式语句),而f() and False是赋值语句。它实际上解析为a += 1 and False,并且由于a += (1 and False)等于1 and FalseFalse实际上是整数0,所以会发生False,一个无操作。< / p> 但是,

a += 0的评估结果为(1 and True)(整数为1),因此True表示a += 1 and True

(另请注意,Python的a += 1and总是返回可以明确确定操作结果的第一个操作数。

答案 1 :(得分:0)

我相信

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