4

例如,有两个类似的代码:

第一个是:

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

第二个是:

 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 回答