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

时间:2018-10-31 22:09:32

标签: python conditional

在以下代码中,如果a()返回1,则b()不会被评估:

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

如何确保不管结果如何,语句中的所有函数都会被求值? 在某些语言中,它们使用|||来区分这两种可能性。 Python中有什么等效的东西吗? 关于and语句的问题相同。

3 个答案:

答案 0 :(得分:2)

如果您需要同时运行这两个函数,则将其显式并完整地写出可能是最干净的:

x = a()
y = b()

if x or y:
  pass

这清楚地表明了调用必须发生。将事实隐藏在条件中似乎是将来忘记该要求并进行重构的好方法,最终会导致您的痛苦。

答案 1 :(得分:1)

如果您仍然希望or逻辑而不会发生短路,请首先评估所有操作数,然后使用any

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

必须先创建列表(这意味着将调用函数并返回其结果),然后再将列表传递到any(如果列表中的任何值为真,则返回True)。

但是请注意,函数应该是纯函数,并且不会引起副作用,以使这种变通办法变得必要。

答案 2 :(得分:1)

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

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