为什么我在 Python 控制台输入 2 或 3 时没有得到 True?

Why do I not get True when I type 2 or 3 at the Python console?

在Python中,任何非零值都被评估为True。因此,例如,以下代码打印 Yes.

if 2 or 3:
    print('Yes')

但是,如果我在 Python 控制台输入 2 or 3,我会得到 2 而不是 True。为什么会有不同的行为?

当使用 or 时,Python 将 return 第一个真值。

print None or 2 #  Prints 2
print 0 or 'Foo' # Prints Foo
print False or True # Prints True

如果第一个值是假的,它会return第二个,实际上不管它是否为真:

print None or False #  Prints False
print False or None # Prints None
print False or 0 # Prints 0

如果链接语句,它将首先评估第一个条件,然后是第二个

print None or False or 0 # Will evaluate into ((None or False) or 0)

这在 PHP and .

等语言中也是可能的

来源: https://docs.python.org/3/library/stdtypes.html#truth-value-testing

or returns 如果值为 truthy,则为第一个值;如果第一个值为 falsy[,则为第二个值 (source).

这种行为有时惯用地用于初始化可变类型的关键字参数:

def foo(bar=None, zoo=None):
    bar = bar or []
    zoo = zoo or {}

这是not the unique way to initialize them, but you should be aware你不应该使用空列表或字典作为默认参数。

在您的所有情况下,2 or 3 表达式生成 2

然后由控制台直接显示,传递给 print 函数,或传递给 if 语句。

if 进行自己的真实性测试。

In [14]: 2 or 3          # or returns the first truthy item
Out[14]: 2
In [15]: None or 3
Out[15]: 3
In [16]: False or 0 or 2
Out[16]: 2

print 仅显示其参数:

In [17]: print(2 or 3)
2

if 如果其参数为真则执行操作; else 如果不是:

In [18]: if 2: print('yes')
yes
In [19]: if False: print('yes')

这里计算 or,然后对结果进行操作:

In [20]: if None or 2 or 3: print('yes')
yes

and returns 第一个 falsy,如果 none

最后一个
In [21]: 2 and 3
Out[21]: 3
In [22]: 2 and False
Out[22]: False
In [23]: 2 and 0 and 3
Out[23]: 0