【发布时间】:2017-10-04 20:45:42
【问题描述】:
any 一旦在任何可迭代对象(无论是迭代器、生成器、列表等)中找到单个真值,就应该短路
对于普通的生成器,这是真的:
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> gen = (i for i in range(100))
>>> gen
<generator object <genexpr> at 0x0341A360>
>>> next(gen)
0
>>> next(gen)
1
>>> any(gen)
True
>>> next(gen)
3
>>>
如果您创建包含print 的生成,any 不会短路:
>>> gen = (print(i) for i in range(100))
>>> next(gen)
0
>>> next(gen)
1
>>> any(gen)
2
3
4
5
6
7
8
9
...
为什么添加print 可以防止any 短路?
【问题讨论】:
-
因为
print返回None,这是一个虚假值。 -
你期待会发生什么?