Python itertools.islice のソース コードはどこにありますか?
私はitertoolsmodule.cを見つけましたが、関数 itertools.islice を見つけることができません (そこにあるかもしれませんが、C コードについてはあまり知りません)。
私がしたときに何が起こるかを理解したい:
itertools.islice(spamreader, rowStart, rowFinish+1)
Python itertools.islice のソース コードはどこにありますか?
私はitertoolsmodule.cを見つけましたが、関数 itertools.islice を見つけることができません (そこにあるかもしれませんが、C コードについてはあまり知りません)。
私がしたときに何が起こるかを理解したい:
itertools.islice(spamreader, rowStart, rowFinish+1)
古い SVN リポジトリを見ています。その後、Python は mercurial に移行しました。私は彼の2.7バージョンをitertoolsmodule.c
見たいと思います; ソースにはislice
オブジェクトがあります。
呼び出すitertools.islice()
と、そのオブジェクトの新しいインスタンスが作成されるため、islice_new
が呼び出されます。
引数が 3 つの場合、next
C 構造体では to int(rowStart)
、stop
toが設定されint(rowFinish+1)
ます。step
は のままにしNone
、it
に設定しiter(spamreader)
ます。最も重要なのは、cnt
に設定されていること0
です。その後、オブジェクトが返されます。
すべての反復作業は で行われislice_next()
、it
は next、stop、および step の値に従って反復されます。
cnt
がインクリメントされ、必要に応じて呼び出され、が と等しいかそれ以上になるnext(it)
までオブジェクトを進めます。その後、アイテムへの呼び出しごとに、 while が生成され、に到達するまでインクリメントされます。cnt
next
islice_next()
cnt
next
stop