Return 来自生成器的列表 Python

Return list from generator Python

我正在尝试从原始版本的 networkx 为 DFS 制作自定义版本。您可以在此处与来自 networkx 的原始版本的 DFS 相关联:networkx DFS

在我的实现中,我想将标签中包含 "if" 的子项添加到列表中,毕竟 return 是列表,但我做不到

def extract_expression(label):
    m = re.search('if(.+?)goto', label)
    if m:
       return m.group(1)
    return None

def dfs_edges(G, source=None):  
    path = list()
    if source is None:
        nodes = G
    else:
        nodes = [source]
    visited=set()
    for start in nodes:
        if start in visited:
            continue
        visited.add(start)
        stack = [(start,iter(G[start]))]
        while stack:
            parent,children = stack[-1]
            try:
                child = next(children)
                label = G.node[child]['label']
                if "if" in label:
                    print child
                    # print extract_expression(label)
                exp = extract_expression(label)
                path.append(exp)
                if child not in visited:
                    yield parent,child      
                    visited.add(child)
                    stack.append((child,iter(G[child])))
            except StopIteration:
                stack.pop()
    return path

抛出错误

    return path
SyntaxError: 'return' with argument inside generator

生成器函数必须始终产生它的结果。

您可以简单地将 return path 替换为 yield path,但这将是一种不好的做法,并且总体上不一致。 你会 return parent, child 并且有一次突然得到一个列表。