【发布时间】:2017-06-10 11:53:13
【问题描述】:
我正在尝试从 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
【问题讨论】:
-
生成器用
yield一个一个地返回项目。没有return。 -
extract_expression 的作用。
-
@JayParikh:它只是一个从原始字符串中提取子字符串的函数
-
正如它所说,您不能在生成器中拥有
return。如果您想添加到列表中,请从一个空列表开始,然后只需append()。