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
并且有一次突然得到一个列表。
我正在尝试从原始版本的 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
并且有一次突然得到一个列表。