3

Python itertools.islice 的源代码在哪里?

我找到了itertoolsmodule.c,但找不到函数 itertools.islice (也许它在那里,但我对 C 代码了解不多)。

我想了解当我这样做时会发生什么:

itertools.islice(spamreader, rowStart, rowFinish+1)
4

1 回答 1

7

您正在查看旧的 SVN 存储库;Python 从此转向了 mercurial。我会看看他的 2.7 版本itertoolsmodule.c;源有一个islice 对象

当您调用时,itertools.islice()您会创建该对象的新实例,因此islice_new调用。

使用 3 个参数,next在 C 结构中设置为int(rowStart), stopto int(rowFinish+1)step保留为Noneit设置为iter(spamreader)。最重要的cnt是,设置为0. 然后返回对象。

所有的迭代工作都在 中完成islice_next(),其中it根据 next、stop 和 step 值进行迭代。

cnt递增并next(it)根据需要调用以推进对象,直到cnt等于或大于next; 之后,每次对islice_next()项目的调用都会产生 whilecntnext递增,直到stop达到。

于 2013-09-27T07:10:44.703 回答