3

Python itertools.islice のソース コードはどこにありますか?

私はitertoolsmodule.cを見つけましたが、関数 itertools.islice を見つけることができません (そこにあるかもしれませんが、C コードについてはあまり知りません)。

私がしたときに何が起こるかを理解したい:

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

1 に答える 1

7

古い SVN リポジトリを見ています。その後、Python は mercurial に移行しました。私は彼の2.7バージョンをitertoolsmodule.c見たいと思います; ソースにはislice オブジェクトがあります。

呼び出すitertools.islice()と、そのオブジェクトの新しいインスタンスが作成されるため、islice_newが呼び出されます。

引数が 3 つの場合、nextC 構造体では to int(rowStart)stoptoが設定されint(rowFinish+1)ます。stepは のままにしNoneitに設定しiter(spamreader)ます。最も重要なのは、cntに設定されていること0です。その後、オブジェクトが返されます。

すべての反復作業は で行われislice_next()itは next、stop、および step の値に従って反復されます。

cntがインクリメントされ、必要に応じて呼び出され、が と等しいかそれ以上になるnext(it)までオブジェクトを進めます。その後、アイテムへの呼び出しごとに、 while が生成され、に到達するまでインクリメントされます。cntnextislice_next()cntnextstop

于 2013-09-27T07:10:44.703 に答える