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

时间:2013-09-27 07:04:49

标签: python itertools

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

我找到itertoolsmodule.c,但找不到函数itertools.islice(也许它就在那里,但我对C代码知之甚少。)

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

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

1 个答案:

答案 0 :(得分:7)

您正在查看旧的SVN存储库; Python已经变得多变。我看着他2.7 version of itertoolsmodule.c;来源有islice object

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

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

所有迭代工作都在islice_next()完成,其中it根据下一个,停止和步骤值进行迭代。

cnt会递增,并根据需要调用next(it)来推进对象,直到cnt等于或大于next;之后,对于islice_next()的每次通话,会产生一个项目,同时cntnext会增加,直到达到stop