在下面的代码片段中,函数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
短路是如何以这种方式运行的?
答案 0 :(得分:8)
那是因为PUSH WORD PTR [chr]
是一个表达式(技术上是单表达式语句),而f() and False
是赋值语句。它实际上解析为a += 1 and False
,并且由于a += (1 and False)
等于1 and False
而False
实际上是整数0,所以会发生False
,一个无操作。< / p>
但是,
a += 0
的评估结果为(1 and True)
(整数为1),因此True
表示a += 1 and True
。
(另请注意,Python的a += 1
和and
总是返回可以明确确定操作结果的第一个操作数。
答案 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