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
这清楚地表明调用应该发生。在条件中隐藏这个事实似乎是一个很好的方式来忘记这个需求,并进行最终会让你痛苦的重构。
在下面的代码中,如果 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
这清楚地表明调用应该发生。在条件中隐藏这个事实似乎是一个很好的方式来忘记这个需求,并进行最终会让你痛苦的重构。