簡體   English   中英

生成器Python的返回列表

[英]Return list from generator Python

我正在嘗試從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

生成器函數必須始終產生其結果。

您可以簡單地將return path替換為yield path但這將是一種不好的做法,並且總體上是不一致的。 您將返回parent, child並突然獲得一份清單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM