[英]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.