4

たとえば、2つの類似したコードがあります。

最初のものは次のとおりです。

 for chrom in bins:
     for a_bin in bins[chrom]:
         for pos in a_bin:
             pos = pos+100

2つ目は次のとおりです。

 for chrom in bins:
     for a_bin in bins[chrom]:
         for pos in a_bin:
             if chrom=="chr1":
                 pos = pos*100

同じ構造のコードを繰り返し書く必要がないように、ループをリファクタリングする方法があるかどうか疑問に思いました。

誰かがこれについての考えを持っていますか?

4

1 に答える 1

3

これは、ジェネレーター関数を使用して実現できます。

def gen():
    for chrom in bins:
        for a_bin in bins[chrom]:
           for pos in a_bin:
               yield pos

によって生成されたアイテムを反復処理できますが、作成されるgen()「アイテムのリスト」はありません。むしろ、オンデマンドで作成されます。

for pos in gen():
    pass # add loop code here

gen()これは、ループを早期に終了すると、メソッドが中止されることも意味します(例外を除く)。これがどのように実装されているかを理解するために、コルチンを見てください。

于 2012-10-30T07:20:16.267 に答える