【发布时间】:2019-05-25 08:49:48
【问题描述】:
在列表理解中使用“and”或“or”,但结果不例外。为什么?
> [print(i) and print(i) for i in range(1)]
0
> [print(i) or print(i) for i in range(1)]
0
0
【问题讨论】:
-
您的预期结果是什么?这段代码的初衷是什么?一方面,您不应该将列表推导用于副作用。至于为什么它打印两次而不是一次,
print返回None,所以and只需要评估一个操作数就知道整体结果将是 false-y 而or需要检查第二个如果第一个 不是真实的。 -
Print 返回一个 NoneType,其计算结果为 False。因此,如果您说 None 和 None 返回 None 并且如果您说 None 或 None 也评估为 False。