Для этой же задачи я закодировал две разные функции. Я хотел бы знать, какой из них более элегантный.Стиль кодирования Python - несколько операторов возврата
Задача состоит в том, чтобы проверить объект pydot
, если он видит запрашиваемый узел, и если да, то вернуть объект и объект графика обратно. Если узел не существует, узел должен быть создан.
Чтобы получить имена узлов, я использую функции pydot
get_nodes()
. Однако, если еще не введены какие-либо узлы, эта функция возвращает пустой список. Следовательно, перед повторением этих значений я делаю пустую проверку списка.
Первый вариант (вариант 1) легко понять. После проверки длины, которая необходима из-за node.get_name()
, она перебирается к именам узлов, и как только найденный узел найден, узел и график возвращаются. Если нет, он вызывает функцию, которая создает узел и обновляет график. Хотя эту функцию легко понять, ИМХО это не изящно. Здесь приводятся два заявления «о возврате»:
def variant1(node_name, graph):
if len(graph.get_nodes()) > 0:
for node in graph.get_nodes():
if node_name == node.get_name():
return node, graph
return create_node(node_name, graph)
Второй вариант, это сложнее. Как только узел находится на графике, он разбивается и переходит непосредственно к последней строке («return node, graph»). Этот вариант имеет только один оператор возврата.
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
Мой вопрос, который один я предпочитаю использовать, в соответствии с «Дзен Python», «PEP8» или «Google Python Style Guide»?
В первом я просто вернул create_node (node_name, graph) '- зачем назначать одну строку? – jonrsharpe
@jonrsharpe вы правы! Я обновлю его. Благодаря! –
Создает ли 'create_node' узел и график? В идеале ваша функция вернет пару узлов/графов независимо от того, создан или нет новый узел. – chepner