是0否,其他所有整数都为真? [重复]

问题描述 投票:0回答:3

我一直在看一段非常棘手的python代码。我知道答案,但是我不明白为什么答案就是它。

def f(x): 
    return x

def g(x, y):
    if x(y):         # does x(3) == True?
        return not y # is != 3 == False?
    return y

x = 3
x = g(f, x)
f = g(f, 0)

因此,据我所知,首次调用g(x,y)时变量x的值解析为False。我很困惑为什么这是因为下面的行:

if x(y)

这会从f(x)内部调用g(x,y),并将3传递给它。然后,f(x)再次返回3,从而触发return not y。在这种情况下x(3)是否等于True?这是为什么?然后,下次调用f(x)并将其传递为0时,将触发return y。这是否意味着x(0)False?另外not y的值是多少,因为有人告诉我它是False,但我不知道not 3的值是如何False。如果我的询问方式令人困惑,我真的很抱歉,但是我不确定该怎么做。非常感谢您的帮助!

python boolean-logic
3个回答
0
投票

0和1分别类似于布尔值FalseTrue

您可以像这样测试它:

>>> bool(0)
False
>>> bool(1)
True

事实上,每个不为零的数字都是真实的:

>>> bool(3)
True

再次确认编号为not(非零)的结果为False(不是True = False):

>>> not True
False
>>> not 3
False

0
投票

[当您使用if之类的if x语句时,Python实际上会检查bool(x)的值。 bool是通过“ dunder方法” __bool__实现的,该方法在具有所观察到的行为的整数上实现:

In [1]: bool(1)    
Out[1]: True       

In [2]: bool(2)    
Out[2]: True       

In [3]: bool(0)    
Out[3]: False      

当然,如您所料:

In [4]: bool(True)
Out[4]: True

In [5]: bool(False)
Out[5]: False

此规则相当笼统。 None0[]{},一般的空容器等都是“假”,而其他任何东西都是“真”。

In [6]: bool(None)
Out[6]: False

In [7]: bool([])
Out[7]: False

但是

In [9]: bool([0])
Out[9]: True

0
投票

这些示例可能会有所帮助。基本上,当您传递g(f,0)时,它返回false,因此它返回y,而不是(不是y)。其他任何数字均为true,因此不传递y,任何数字均为false。希望对您有所帮助。


In [7658]: not True                                                                                                                                                               
Out[7658]: False

In [7659]: not False                                                                                                                                                              
Out[7659]: True

In [7660]: not 0                                                                                                                                                                  
Out[7660]: True

In [7661]: not 1                                                                                                                                                                  
Out[7661]: False

In [7662]: not 3                                                                                                                                                                  
Out[7662]: False

In [7673]: g(f, 0)                                                                                                                                                                
Out[7673]: 0


0
投票

int为0,浮点数为0.0,一个空列表/元组/ dict / set,一个空字符串或字节,一个None在Python中都是Falsy,这意味着它们被评估为False。除此之外,还有其他。对于整数,任何非零整数都是Truthy。

因此在下面的代码中:

if x:
    print('yay')
else:
    print('nay')

如果x是上面概述的Falsy值之一,则将始终打印“否”。对于任何非伪造的x,将始终打印“是”。

© www.soinside.com 2019 - 2024. All rights reserved.