深入研究 python if 语句

Digging deeper into python if statements

这可能是一个非常愚蠢的问题,但我无法在其他任何地方找到答案,我已经看过 SO,但找不到与我的问题相关的任何内容。

问题:

在 python 中,不知道其他语言,每当我们为内置 class 调用 if 语句时,它 returns if 语句解释的内容,例如,

a = 0
if a: print("Hello World")

上面的语句不会打印任何内容,因为 if aFalse。现在哪个方法返回它是 False,或者是否存在 if 语句调用的方法以了解它??

或者更准确地说,if语句在python中更深层次是如何工作的?

好问题!这与 if 语句无关。相反,它是对象本身。

如果一个对象定义了内置方法__bool__,它可以决定它是“truthy”还是“falsey”(也就是returntruefalse).

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。