Python函数短路

时间:2018-10-31 03:54:25

标签: python short-circuiting

我知道Python的短路行为适用于函数。将两个功能合并为一个功能,是否有任何理由不起作用?也就是说,为什么会这样短路,

>>> menu = ['spam']
>>> def test_a(x):
...     return x[0] == 'eggs'  # False.
...
>>> def test_b(x):
...     return x[1] == 'eggs'  # Raises IndexError.
...
>>> test_a(menu) and test_b(menu)
False

这不是吗?

>>> condition = test_a and test_b
>>> condition(menu)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in test_b
IndexError: list index out of range

1 个答案:

答案 0 :(得分:1)

执行此操作时:

>>> condition = test_a and test_b

您错误地期望获得一个返回结果test_a(x) and test_b(x)的新函数。您实际上得到了evaluation of a Boolean expression

  

x and y:如果 x 为假,则为 x ,否则为 y

由于test_atest_b的{​​{3}}均为True,因此condition被设置为test_b。这就是condition(menu)test_b(menu)给出相同结果的原因。

要实现预期的行为,请执行以下操作:

>>> def condition(x):
...     return test_a(x) and test_b(x)
...