2013-09-27 115 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