例如,有两个相似的代码:
第一个是:
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
我想知道是否有一种重构循环的方法,这样我就不需要重复编写具有相同结构的代码了。
任何人对此有什么想法?
答案 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以了解其实施方式。