Python itertools.islice的源代码在哪里?
我找到itertoolsmodule.c,但找不到函数itertools.islice(也许它就在那里,但我对C代码知之甚少。)
我想了解当我这样做时会发生什么:
itertools.islice(spamreader, rowStart, rowFinish+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
保留为None
,it
设置为iter(spamreader)
。最重要的是,cnt
设置为0
。然后返回该对象。
所有迭代工作都在islice_next()
完成,其中it
根据下一个,停止和步骤值进行迭代。
cnt
会递增,并根据需要调用next(it)
来推进对象,直到cnt
等于或大于next
;之后,对于islice_next()
的每次通话,会产生一个项目,同时cnt
和next
会增加,直到达到stop
。