在Python中,如果我写
z = 1 and 2
print z
然后它产生" 2"。
但如果我写
z = 0 and 2
print z
现在,它产生" 0"。
在现实生活中这可能并不重要,但我试图理解这里的逻辑。
答案 0 :(得分:7)
0
,[]
,""
都是 false-ish (在python条件下它们被视为False
)。 and
返回第一个 false-ish 值或最后一个值。这称为short-circuit evaluation。这就是为什么在一种情况下它返回2
(最后一个)而在另一种情况下它返回0
( false-ish )。
事实上,如果你考虑逻辑运算,你可以短路这种行为:
x and y (with x false-ish) -> x
x and y (with x true-ish) -> y
当插入某个条件时,它将评估为:
x
的布尔结果False
。这是and
操作的正确结果,因为任何False and y
False
= y
。y
的布尔值。由于x
为True,and
的结果False
y
False
True
y
True
y
{{1}} {1}}(它反映了{{1}})的价值。答案 1 :(得分:2)
c = a and b
与
相同if a:
c=b
else:
c=a
我认为更有趣的是or
:
c = a or b
与
相同if a:
c=a
else:
c=b
另请注意,if a:
是if bool(a):
的缩写。 bool
为此对象/值返回False
:
None, 0, False, "", [], tuple(), dict(), set()
正如你所看到的,它们都是空的......
答案 2 :(得分:1)
python短路中的and
运算符。也就是说:它只评估足够的操作数(从左到右),以确定结果是True还是False。 and
的结果为False,因此在第二种情况下,0的计算结果为False,并返回0,但是当1为True时,还必须计算并返回第二个操作数。
答案 3 :(得分:1)
0被视为False,任何高于零的值被视为True,因此z = 1且2设置z等于2且z = 0且2为0,因为它的计算结果为False。