用共享變量重構(gòu)嵌套循環(huán)

我有一個(gè)函數(shù),它使用嵌套循環(huán)處理一些非常嵌套的數(shù)據(jù)。其簡(jiǎn)化結(jié)構(gòu)如下:

def process_elements(root):
    for a in root.elements:
        if a.some_condition:
            continue
        for b in a.elements:
            if b.some_condition:
                continue
            for c in b.elements:
                if c.some_condition:
                    continue
                for d in c.elements:
                    if d.some_condition:
                        do_something_using_all(a, b, c, d)

這在我看來(lái)不太pythonic,所以我想重構(gòu)它。我的想法是將其分解為多個(gè)功能,比如:

def process_elements(root):
    for a in root.elements:
        if a.some_condition:
            continue
        process_a_elements(a)
        
def process_a_elements(a):
    for b in a.elements:
        if b.some_condition:
            continue
        process_b_elements(b)
        
def process_b_elements(b):
    for c in b.elements:
        if c.some_condition:
            continue
        process_c_elements(c)
        
def proccess_c_elements(c):
    for d in c.elements:
        if d.some_condition:
            do_something_using_all(a, b, c, d) # Problem: I do not have a nor b!

如您所見(jiàn),對(duì)于更嵌套的級(jí)別,我需要使用其所有“父”元素來(lái)執(zhí)行某些操作。這些函數(shù)將具有唯一的作用域,因此我無(wú)法訪(fǎng)問(wèn)這些元素。將所有前面的元素傳遞給每個(gè)函數(shù)(比如proccess_c_elements(c, a, b))確實(shí)看起來(lái)很難看,而且對(duì)我來(lái)說(shuō)也不是很pythonic。。。

Any ideas?

? 最佳回答:

FWIW,我找到了一個(gè)解決方案,它將所有處理封裝在一個(gè)類(lèi)中,并具有跟蹤當(dāng)前處理的元素的屬性:

class ElementsProcessor:
    def __init__(self, root):
        self.root = root
        
        self.currently_processed_a = None
        self.currently_processed_b = None
        
    def process_elements(self):
        for a in self.root.elements:
            if a.some_condition:
                continue
            self.process_a_elements(a)
            
    def process_a_elements(self, a):
        self.currently_processed_a = a
        for b in a.elements:
            if b.some_condition:
                continue
            self.process_b_elements(b)
            
    def process_b_elements(self, b):
        self.currently_processed_b = b
        for c in b.elements:
            if c.some_condition:
                continue
            self.process_c_elements(c)
    
    def process_c_elements(self, c):
        for d in c.elements:
            if d.some_condition:
                do_something_using_all(
                    self.currently_processed_a,
                    self.currently_processed_b,
                    c,
                    d
                )
主站蜘蛛池模板: 亚洲Av无码国产一区二区| 亚洲乱码一区二区三区在线观看| 亚洲一区二区影院| 蜜桃传媒一区二区亚洲AV| 国产精品视频一区二区三区四| 白丝爆浆18禁一区二区三区| 国产高清在线精品一区| 91久久精品无码一区二区毛片| 国产一区三区三区| 精品少妇一区二区三区在线| 精品一区二区三区在线视频观看| 在线观看一区二区三区视频| 精品国产一区二区三区香蕉| 国产精品视频分类一区| 亚洲国产美女福利直播秀一区二区| 亚洲国产精品一区二区成人片国内| 国产一区二区三区高清在线观看 | 无码一区二区三区老色鬼| 人妻免费一区二区三区最新| 国产免费一区二区三区免费视频 | 国产午夜精品一区二区| 亚洲AV日韩精品一区二区三区| 无码精品人妻一区二区三区免费| 精品乱码一区二区三区在线| 欲色影视天天一区二区三区色香欲| 精品天海翼一区二区| 国产色精品vr一区区三区| 国产成人一区在线不卡| 自慰无码一区二区三区| 日本亚洲成高清一区二区三区| 一区二区三区日韩| 国产精品高清视亚洲一区二区| 精品亚洲福利一区二区| 无码人妻精品一区二区三区99不卡 | 国产福利一区二区在线视频 | 国产成人无码一区二区三区| 日本高清不卡一区| 无码夜色一区二区三区| 国产女人乱人伦精品一区二区| 国产激情一区二区三区 | 久久久精品人妻一区亚美研究所 |