在Python中重构循环的方法?

时间:2012-10-30 07:19:24

标签: python loops refactoring

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

第一个是:

 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

我想知道是否有一种重构循环的方法,这样我就不需要重复编写具有相同结构的代码了。

任何人对此有什么想法?

1 个答案:

答案 0 :(得分:3)

这可以通过generator function来实现。

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()方法将被中止(有例外)。请查看corutines以了解其实施方式。