2013-09-27 117 views
2

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

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

我想知道当我这样做会发生什么:

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

看起来像是在那里开始左右行1115左右 – mgilson

+0

看1252行(构造函数在1118)。 –

回答

7

您正在寻找老SVN仓库; Python已经转移到了mercurial。我会看他2.7 version of itertoolsmodule.c;该来源有isliceobject

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

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

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

cnt递增,并根据需要调用next(it)以推进对象,直到cnt等于或大于next;之后,对islice_next()的每个呼叫产生一个项目,而cntnext递增直到达到stop