0为False,其他所有整数为True吗?

时间:2019-12-01 04:13:25

标签: python boolean-logic

我一直在看一段非常棘手的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。如果我的询问方式令人困惑,我真的很抱歉,但是我不确定该怎么做。任何帮助深表感谢!

4 个答案:

答案 0 :(得分:1)

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

您可以像这样测试它:

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

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

>>> bool(3)
True

再次确认数字not(非零)产生False(不是True = False):

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

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

因此在以下代码中:

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

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