0 是 False 而所有其他整数值是 True 吗?
Is 0 False and all other integer values True?
我一直在研究一段非常棘手的 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)
这从 g(x,y)
内部调用 f(x)
并将 3 传递给它。然后 f(x)
returns 3 再次触发 return not y
。在这种情况下 x(3)
是否等同于 True
?这是为什么?然后,下次调用 f(x)
并传递 0 时,会触发 return y
。这是否意味着 x(0)
是 False
?另外,not y
的值是多少,因为有人告诉我它是 False
,我不明白 not 3
的值是 False
。如果我问这个问题的方式令人困惑,我真的很抱歉,但我不确定还有什么办法可以解决。非常感谢任何帮助!!
0 和 1 分别类似于布尔值 False
和 True
。
你可以这样测试:
>>> bool(0)
False
>>> bool(1)
True
事实上,每个不为零的数字都是真实的:
>>> bool(3)
True
这再次证实 not
数字(非零)产生 False
(不是 True
= False
):
>>> not True
False
>>> not 3
False
当你使用像 if x
这样的 if
语句时,Python 实际上会检查 bool(x)
的值。 bool
由 "dunder method" __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
这条规则相当笼统。 None
、0
、[]
、{}
、一般的空容器等都是"falsey",其他都是"truthy"。
In [6]: bool(None)
Out[6]: False
In [7]: bool([])
Out[7]: False
但是
In [9]: bool([0])
Out[9]: True
这些示例可能会有所帮助。基本上当你传递 g(f, 0) 时,它 returns false,所以它 returns y,not (not y)。任何其他数字都是真实的,所以它不通过 y,这对任何数字都是错误的。希望对您有所帮助。
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 的整数,一个 0.0 的浮点数,一个空的 list/tuple/dict/set,一个空的字符串或字节,一个 None 在 Python 中都是 Falsy,这意味着它们被评估为错误的。其他任何东西都是真实的。在整数的情况下,任何非零整数都是真实的。
所以在下面的代码中:
if x:
print('yay')
else:
print('nay')
如果 x
是上面总结的 Falsy 值之一,将始终打印 'nay'。对于任何非 Falsy x
,总是会打印 'yay'。
我一直在研究一段非常棘手的 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)
这从 g(x,y)
内部调用 f(x)
并将 3 传递给它。然后 f(x)
returns 3 再次触发 return not y
。在这种情况下 x(3)
是否等同于 True
?这是为什么?然后,下次调用 f(x)
并传递 0 时,会触发 return y
。这是否意味着 x(0)
是 False
?另外,not y
的值是多少,因为有人告诉我它是 False
,我不明白 not 3
的值是 False
。如果我问这个问题的方式令人困惑,我真的很抱歉,但我不确定还有什么办法可以解决。非常感谢任何帮助!!
0 和 1 分别类似于布尔值 False
和 True
。
你可以这样测试:
>>> bool(0)
False
>>> bool(1)
True
事实上,每个不为零的数字都是真实的:
>>> bool(3)
True
这再次证实 not
数字(非零)产生 False
(不是 True
= False
):
>>> not True
False
>>> not 3
False
当你使用像 if x
这样的 if
语句时,Python 实际上会检查 bool(x)
的值。 bool
由 "dunder method" __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
这条规则相当笼统。 None
、0
、[]
、{}
、一般的空容器等都是"falsey",其他都是"truthy"。
In [6]: bool(None)
Out[6]: False
In [7]: bool([])
Out[7]: False
但是
In [9]: bool([0])
Out[9]: True
这些示例可能会有所帮助。基本上当你传递 g(f, 0) 时,它 returns false,所以它 returns y,not (not y)。任何其他数字都是真实的,所以它不通过 y,这对任何数字都是错误的。希望对您有所帮助。
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 的整数,一个 0.0 的浮点数,一个空的 list/tuple/dict/set,一个空的字符串或字节,一个 None 在 Python 中都是 Falsy,这意味着它们被评估为错误的。其他任何东西都是真实的。在整数的情况下,任何非零整数都是真实的。
所以在下面的代码中:
if x:
print('yay')
else:
print('nay')
如果 x
是上面总结的 Falsy 值之一,将始终打印 'nay'。对于任何非 Falsy x
,总是会打印 'yay'。