深入研究 python if 语句
Digging deeper into python if statements
这可能是一个非常愚蠢的问题,但我无法在其他任何地方找到答案,我已经看过 SO,但找不到与我的问题相关的任何内容。
问题:
在 python 中,不知道其他语言,每当我们为内置 class 调用 if 语句时,它 returns if 语句解释的内容,例如,
a = 0
if a: print("Hello World")
上面的语句不会打印任何内容,因为 if a
是 False
。现在哪个方法返回它是 False
,或者是否存在 if 语句调用的方法以了解它??
或者更准确地说,if语句在python中更深层次是如何工作的?
好问题!这与 if
语句无关。相反,它是对象本身。
如果一个对象定义了内置方法__bool__
,它可以决定它是“truthy”还是“falsey”(也就是returntrue
或false
).
见 answer for more details, or the official Python docs
这是狗 class 的简单示例,如果它没有名字,它是 False
:
class Dog:
def __init__(self, name):
this.name = name
def __bool__(self):
return this.name != ""
dog1 = Dog("")
dog2 = Dog("Foo")
if (dog1): print("dog1")
if (dog2): print("dog2")
> dog2
对象有 __bool__
方法,当需要将对象视为布尔值时调用这些方法。你可以通过简单的测试看到:
class Test:
def __bool__(self):
print("Bool called")
return False
t = Test()
if t: # Prints "Bool Called"
pass
bool(0)
给出 False
,因此 0
被认为是一个“虚假”值。
A class 也可以 also be considered to be truthy or falsey based on it's reported length:
class Test:
def __len__(self):
print("Len called")
return 0
t = Test()
if t:
pass
在 Python 中,布尔值(if-else 条件的结果)通常被解释为整数 0 和 1。0 为假,1 为真。
在你的情况下,你将 a 的值指定为 0,python 解释为 False,因此它没有打印任何内容。
Python 中的一个简单规则是空容器(list、dict、set、tuple、str)或 None 或数字(int/float)为 0 将被视为作为假。任何大于 0 或 0.0000 的数字都将被视为 True。
这可能是一个非常愚蠢的问题,但我无法在其他任何地方找到答案,我已经看过 SO,但找不到与我的问题相关的任何内容。
问题:
在 python 中,不知道其他语言,每当我们为内置 class 调用 if 语句时,它 returns if 语句解释的内容,例如,
a = 0
if a: print("Hello World")
上面的语句不会打印任何内容,因为 if a
是 False
。现在哪个方法返回它是 False
,或者是否存在 if 语句调用的方法以了解它??
或者更准确地说,if语句在python中更深层次是如何工作的?
好问题!这与 if
语句无关。相反,它是对象本身。
如果一个对象定义了内置方法__bool__
,它可以决定它是“truthy”还是“falsey”(也就是returntrue
或false
).
见
这是狗 class 的简单示例,如果它没有名字,它是 False
:
class Dog:
def __init__(self, name):
this.name = name
def __bool__(self):
return this.name != ""
dog1 = Dog("")
dog2 = Dog("Foo")
if (dog1): print("dog1")
if (dog2): print("dog2")
> dog2
对象有 __bool__
方法,当需要将对象视为布尔值时调用这些方法。你可以通过简单的测试看到:
class Test:
def __bool__(self):
print("Bool called")
return False
t = Test()
if t: # Prints "Bool Called"
pass
bool(0)
给出 False
,因此 0
被认为是一个“虚假”值。
A class 也可以 also be considered to be truthy or falsey based on it's reported length:
class Test:
def __len__(self):
print("Len called")
return 0
t = Test()
if t:
pass
在 Python 中,布尔值(if-else 条件的结果)通常被解释为整数 0 和 1。0 为假,1 为真。
在你的情况下,你将 a 的值指定为 0,python 解释为 False,因此它没有打印任何内容。
Python 中的一个简单规则是空容器(list、dict、set、tuple、str)或 None 或数字(int/float)为 0 将被视为作为假。任何大于 0 或 0.0000 的数字都将被视为 True。