我注意到itertools
文档中的食谱部分有一些有用的代码,比如consume
,但我发现了一个问题。
from itertools import islice
numbers = iter(range(10))
for i in numbers:
print i
next(islice(numbers, 3, 3), None)
上面的代码工作正常,它打印[0,4,8]
,next(islice(numbers, 3, 3), None)
诀窍是从consume
配方中获取的。
我们可以看到islice
这里发挥着重要的作用。但是,当我用itertools.islice
python 文档中为该函数提供的代码替换时,代码没有按我预期的那样工作:
#from itertools import islice
def islice(iterable, *args):
# islice('ABCDEFG', 2) --> A B
# islice('ABCDEFG', 2, 4) --> C D
# islice('ABCDEFG', 2, None) --> C D E F G
# islice('ABCDEFG', 0, None, 2) --> A C E G
s = slice(*args)
it = iter(xrange(s.start or 0, s.stop or 200, s.step or 1))
nexti = next(it)
for i, element in enumerate(iterable):
if i == nexti:
yield element
nexti = next(it)
numbers = iter(range(10))
for i in numbers:
print i
next(islice(numbers, 3, 3), None)
输出与上面的输出不同;范围内的所有数字都被打印出来,并且islice()
消耗线似乎没有做任何事情。
任何人都可以解释为什么会这样以及这里的工作方式islice
吗?