从生成器Python返回列表

时间:2017-01-25 10:33:04

标签: python networkx yield

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

在我的实现中,我想在标签中添加一个包含“if”的子项到列表中,然后返回列表但是我无法创建它

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

1 个答案:

答案 0 :(得分:2)

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

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