[英]Break loop in recursive function after finding variable python
我知道已经详细讨论了这个主题,但我的用例有些特殊。
问题描述:我正在尝试分析具有多层的树。 每层可能由元素组成,这些元素在访问时可能包含更多可扩展元素(列表)或只是一个简单元素(非列表)。 基本上它就像 Windows / Linux 文件夹和文件系统。 也许以下模式将有助于更好地理解我所指的内容:
[Parent_Element]
|
+ [Element 1]
|
+ [Subelement 1.1]
+ Subsubelement 1.1.1
|
+ [hello_world]
|
Subsubsubelement 1.1.2.1
|
Subsubsubelement 1.1.2.2
|
+ Subsubelement 1.1.3
|
+ [Subelement 1.2]
|
+ Subsubelement 1.2.1
|
+ Subelement 1.3
|
+ [Element 2]
|
+ Subelement2.1
|
+ Element 3
我尝试使用以下代码,该代码部分按照我的意图工作。 问题是我的代码在找到所需的“hello_world”search_variable 后也继续运行。 能够在第一次找到这个变量时停止代码会很好。
def search_function(parent_element, search_variable = "hello_world"):
# Get elements of parent_element
elements = parent_element.get_elements()
#
# Check if Parent_Element has subelements
# TRUE: Parent_Element is LIST
# FALSE: Parent_Element is not a LIST
if isinstance(elements, list):
#
# Loop over each elem of the parent_element and
for elem in elements:
# Check if elem has the desired name
# TRUE: Save elem
if elem.get_display_name().to_string() == search_variable:
print("Search Successful!")
return elem
break
#
# FALSE: Keep on looking in the sub-elements
else:
search_function(elem)
break
else:
pass
#
'break' 永远不会在你的代码中执行。 您应该必须使用flag
并将其设为global
。 break
是在return
之后,这就是break
永远不会执行的原因。
if elem.get_display_name().to_string() == search_variable:
print("Search Successful!")
return elem
break
使用与前一个相同级别的另一个 if 语句来控制它。 您可以像这样编辑代码。
for elem in elements:
# Check if elem has the desired name
# TRUE: Save elem
if elem.get_display_name().to_string() == search_variable:
print("Search Successful!")
flag = 1
return elem
#
# FALSE: Keep on looking in the sub-elements
else:
second_trial_function(elem)
break
if flag :
break
好的,感谢@KittoMi 的回应,我能够完成我的功能:
def search_function(input_node, search_variable = "hello_world"):
global x
global searched_elem
#
elements = input_node.get_children()
#
if isinstance(elements, list):
for elem in elements:
#
print(elem)
if elem.get_display_name().to_string() == search_variable:
x = 1
print("Found it!")
print(elem)
searched_elem = str(elem)
return searched_elem
#
else:
search_function(elem, search_variable=search_variable)
if x:
break
else:
pass
#
但我必须承认,我仍然不完全理解为什么它没有全局 searched_elem就不起作用。
该函数正在查找搜索变量,它打印“找到它”消息,但随后它自己执行了进一步的 2-3 次计算,并且显示的结果是另一个预期的结果。 这是返回的打印(elem)的一个小例子:
hello_world
Found!
hello_world
other_elem
yet_another_elem
这就是为什么我不得不求助于全局 searched_elem 。 也许有人可以澄清这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.