在 Python3 中将 int 与 None 进行比较时没有 TypeError

No TypeError comparing int with None in Python3

我知道比较 int 和 None 类型在 Python3 (3.6.1) 中无效,正如我在此处看到的:

>>> largest = None
>>> number = 5
>>> number > largest
TypeError: '>' not supported between instances of int and NoneType

但是在这个脚本中它没有给出 TypeError。

largest = None
for number in [5, 20, 11]:
    if largest is None or number > largest:
        largest = number

当我 运行 这个脚本 python3 它 运行 没有类型错误。为什么?

您正在见证 short circuiting

if largest is None or number > largest:
        (1)        or      (2)

当条件 (1) 被评估为真时,条件 (2) 被执行。在第一次迭代中,largest is NoneTrue,因此 整个表达式 为真。


作为说明性示例,请考虑这个小片段。

test = 1
if test or not print('Nope!'):
     pass

# Nothing printed 

现在,用 test=None 重复:

test = None
if test or not print('Nope!'):
     pass

Nope!

如果仔细检查代码,您会注意到将 largest 初始化为 None,然后有条件地询问它是否为 None,因此 if 语句的计算结果为 True .