def variant2(node_name, graph):
if len(graph.get_nodes()) > 0:
for node in graph.get_nodes():
if node_name == node.get_name():
break
else:
# the node doesnt exist. create it and update the graph
node, graph = create_node(node_name, graph)
else:
# create the first node in the graph
node, graph = create_node(node_name, graph)
return node, graph
我的问题是,根据“The Zen of Python”、“PEP8”或“Google Python Style Guide”,我应该更喜欢使用哪一个?
我是这样写的:
def variant1a(node_name, graph):
"""Include a docstring, too!"""
for node in graph.get_nodes():
if node.get_name() == node_name:
return node, graph
return create_node(node_name, graph)
这意味着:
比较操作的顺序更易读;
只有一根线呼叫create_node (DRY!);
虽然有两个return行,两者都位于函数的底部;
no for: else:(有些人不喜欢 - 我认为它通常很有用,但在这里没有必要);和
没有不必要的长度检查(如果len(graph.get_nodes)为零,无论如何都会跳过循环)。
PEP-8 并不禁止多个return线条(事实上,风格指南中的一些示例确实有线条)。我在 Google 的风格指南中看不到对它的引用,但我没有展开所有部分!