试图理解python中关于'and'命令的一个简单特性。有人能澄清一下吗?

2024-04-25 12:10:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,如果我写

z = 1 and 2
print z

然后得到“2”。你知道吗

但如果我写

z = 0 and 2
print z

现在,它的结果是“0”。你知道吗

这在现实生活中可能不太重要,但我试图理解这里的逻辑。你知道吗


Tags: and逻辑print现实生活
3条回答

0[]""都是假ish(在python条件中它们被视为False)。and返回第一个值或最后一个值。这被称为short-circuit evaluation。这就是为什么在一种情况下它返回2(最后一个),而在另一种情况下它返回0(假ish)。你知道吗

事实上,如果你考虑逻辑运算,你可以短路这种行为:

x and y (with x false-ish) -> x  
x and y (with x true-ish)  -> y

当插入某个条件时,它将评估为:

  • 在第一种情况下,它计算x的布尔结果,即False。这是and操作的正确结果,因为任何yFalse and y=False。你知道吗
  • 在第二种情况下,它计算y的布尔值。既然x是真的,当yFalseand的结果应该是False,当yTrueTrue(它反映了y的值)。你知道吗

python中的and运算符短路。也就是说:它只计算足够的操作数(从左到右)以确定结果是真还是假。and的结果为False,因此在第二种情况下,0的计算结果为False,并返回0,但当1为True时,还必须计算并返回第二个操作数。你知道吗

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() 

如你所见,它们都是空的。。。你知道吗

相关问题 更多 >