在以下代码中,如果a()
返回1,则b()
不会被评估:
if (a() or b()):
# do stuff
如何确保不管结果如何,语句中的所有函数都会被求值?
在某些语言中,它们使用|
和||
来区分这两种可能性。 Python中有什么等效的东西吗?
关于and
语句的问题相同。
答案 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()]):
...