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



在以下代码中,如果a()返回1,则不计算b()

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

如何确保语句中的所有函数都将被求值,无论其结果如何?在某些语言中,他们使用|||来区分这两种可能性。Python中有类似的东西吗?and语句也有同样的问题。

如果您需要运行这两个函数,那么显式并完整地写出它可能是最干净的:

x = a()
y = b()
if x or y:
pass

这清楚地表明,这些呼吁必然会发生。将这个事实隐藏在条件中似乎是一个很好的方法,可以在未来忘记这个需求,并进行最终会让你痛苦的重构。

如果您仍然希望or逻辑没有短路,请首先计算所有操作数,然后使用any:

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

在将列表传递给any(如果列表中的任何值是真的,则返回True(之前,必须首先创建列表(这意味着将调用函数并返回其结果(。

然而,请注意,功能应该是纯粹的,不会产生副作用,这样就有必要采用这种巧妙的解决方法。

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

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

最新更新