找到变量python后在递归函数中中断循环

2024-10-04 11:23:35 发布

您现在位置: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\u world”后,我的代码也会继续运行。当第一次找到这个变量时,如果能够停止代码就好了

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
#

Tags: the代码元素helloworldsearchifelements
2条回答

好的,多亏@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
    #

但是我必须承认,我仍然不能完全理解为什么没有全局搜索元素它就不能工作

函数正在查找搜索变量,它打印了“Find it”消息,但随后它自己进行了2-3次计算,显示的结果是另一个预期结果。 下面是返回打印(elem)的一个小示例:

hello_world
Found!
hello_world
other_elem
yet_another_elem

这就是为什么我不得不求助于全球搜索元素。也许有人能澄清这一点

“break”永远不会在代码中执行。您应该使用flag并使其成为globalbreakreturn之后,这就是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

相关问题 更多 >