Python 功能短路
Python short-circuiting of functions
我知道 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
当您这样做时:
>>> condition = test_a and test_b
您错误地期望获得 returns 结果 test_a(x) and test_b(x)
的新函数。你实际上得到了 evaluation of a Boolean expression:
x and y
: if x is false, then x, else y
由于test_a
和test_b
的truth value都是True
,所以condition
设置为test_b
。这就是为什么 condition(menu)
给出与 test_b(menu)
.
相同的结果
要实现预期的行为,请执行:
>>> def condition(x):
... return test_a(x) and test_b(x)
...
我知道 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
当您这样做时:
>>> condition = test_a and test_b
您错误地期望获得 returns 结果 test_a(x) and test_b(x)
的新函数。你实际上得到了 evaluation of a Boolean expression:
x and y
: if x is false, then x, else y
由于test_a
和test_b
的truth value都是True
,所以condition
设置为test_b
。这就是为什么 condition(menu)
给出与 test_b(menu)
.
要实现预期的行为,请执行:
>>> def condition(x):
... return test_a(x) and test_b(x)
...