我正在尝试使用python的all()
功能检查一些条件。
我的理解是,此代码会False
在函数评估返回状态时立即将其短路False
。如果这种理解是正确的,那么有人可以解释以下内容:
>>> a = None
>>> b = None
>>> all([a is None, b])
False
>>> all([a is None, b, "text" in b])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'NoneType' is not iterable
>>> b = {"text": "Text I'm looking for"}
>>> all([a is None, b, "text" in b])
True
我第一次运行all()
表明它的评估结果正确,False
因此,如果我添加另一个测试,为什么会中断?我是否误解了短路的原理?
我已经在python 3.8.3和python 2.7.18中测试了此结果。
这与没有任何关系all
。您正在创建一个列表文字,它将在传递给之前评估其内容all
:
>>> [a is None, b, "text" in b]
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: argument of type 'NoneType' is not iterables
如果您希望它按预期工作,则需要一个惰性结构而不是列表:
a = None
b = None
def lazy(): # A lazy generator
yield a is None
yield b
yield "text" in b
>>> all(lazy())
False
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句