簡體   English   中英

Python-對方法和while循環非常困惑

[英]Python - very confused about method and while loop

我有這種方法:

def is_active(self):
    if self.is_current_node():
        return True
    cur_children = self.get_children()
    while cur_children is not None:
        for child in cur_children:
            if child.is_current_node():
                return True
            raise Exception(child.display_name)
        cur_children = cur_children.get_children()
    return False

我將這個方法放在一起,然后將raise Exception(child.display_name)進行測試,然后“ alert()”向我指出哪個孩子受到了打擊。 永遠不會引發例外。 您可能認為這是因為該函數在if child.is_current_node()部分返回了True 好吧,如果我用以下內容替換if部分:

        for child in cur_children:
            if child.is_current_node():
                raise Exception(child.display_name)

它仍然不會引發異常。 但是,如果我這樣做:

        for child in cur_children:
            raise Exception(child.display_name)

引發了異常。 我很混亂。 我確定這太荒謬了,但我還不到2歲,我想不出足夠的思路來纏住我的小腦袋。

如果列表.is_current_node()中的第一個孩子,則永遠不會在您的第一個代碼片段中引發異常。

您所獲得的一切證據都支持self.is_current_node()始終為true或第一個掃描的子項.is_current_node()始終為真的想法。 給定第三個代碼段,后者似乎是事實。

編輯:消除誤解(孩子!=自我):/

實際上,我不得不問,這應該做什么? 它看起來像遞歸樹遍歷,但還不完全是。 (特別是cur_children = cur_children.get_children()行有點奇怪)

一些想法:

cur_children = self._children,而cur_children不為None:適用於cur_children中的孩子:if child.is_current_node():返回True引發異常(child.display_name)cur_children = cur_children._children

我假設self._children包含多個孩子: [A, B, C]

然后,在第一個循環中,它將取A 假設A具有以下子代: [AA, AB, AC ]。

現在,您執行以下操作: cur_children = cur_children._children 這意味着現在,代替並繼續B從inital [A, B, C]它會繼續與AA ,等等。

在此示例中,它將永遠不會到達B 這是故意的嗎?


您的is_current_node()包含什么? 可能您忘記了返回值,因此結果始終為None ,並且bool(None) == False


另一個想法:(遞歸)

def is_active(self):

    def check_children(children):
        for child in children:
            if child.is_current_node():
                return True
            else:
                if children._children:
                    return check_children(children._children)
        return False

    if self.is_current_node():
        return True
    return check_children(children)

也許is_current_node總是返回True,而is_current_tab總是返回False? 我認為還需要更多背景信息才能為您提供答案。

我唯一能想到的是is_current_node更改狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM