Python - 评估条件语句的每个条件

Python - Evaluate every conditions of a conditional statement

在下面的代码中,如果 a() returns 1,则 b() 不计算:

if (a() or b()):
    # do stuff

如何确保语句中的所有函数无论其结果如何都会被计算? 在某些语言中,他们使用 ||| 来区分这两种可能性。 Python中有什么等价物吗? and 语句的相同问题。

如果你仍然想要 or 没有短路的逻辑,首先评估所有操作数然后使用 any:

if any([a(), b()]):
    ...

必须先创建列表(这意味着将调用函数并返回它们的结果),然后再将列表传递给 any(其中 returns True 如果其中有任何值该列表是真实的)。

但是请注意,函数应该是纯净的,不会产生副作用,这样就需要像这样的 hacky 解决方法。

您可以使用任何接受函数列表的方法,即

if any([a(), b()]):
    ...

如果 运行 需要这两个函数,那么明确并完整地写出来可能是最干净的方法:

x = a()
y = b()

if x or y:
  pass

这清楚地表明调用应该发生。在条件中隐藏这个事实似乎是一个很好的方式来忘记这个需求,并进行最终会让你痛苦的重构。