我正在尝试从原始版本的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
答案 0 :(得分:2)
生成器函数必须始终产生其结果。
您可以简单地将return path
替换为yield path
,但这将是不好的做法,并且总体上不一致。
您将返回parent, child
并突然获得一个列表。