在 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 None
是 True
,因此 整个表达式 为真。
作为说明性示例,请考虑这个小片段。
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
.
我知道比较 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 None
是 True
,因此 整个表达式 为真。
作为说明性示例,请考虑这个小片段。
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
.