Основная проблема с вашим кодом в том, что последняя ветвь не имеет смысла. Даже в вашем примере с PHP в основном говорится:
if (null) return null;
Вы можете уменьшить все до:
indiv_id = checkIndiv(name)
if indiv_id:
return indiv_id
else:
return addIndiv(name)
(Если индивидуальный_идентификатор может стать чем-то, что можно сравнить с False
, вы должны проверить по None
, но использовать is
вместо ==
!)
Может быть, вы могли бы работать с исключениями:
def check_or_add(name):
try:
return checkIndiv(name)
except CheckException:
return addIndiv(name)
В целом, однако, ваша семантика кажется мне странной: я не ожидал бы, что функция с «check» в имени будет возвращать объект вместо простого True
или False
. Я бы, вероятно, использовал разные имена:
id = get_indiv(name)
if id:
return id
else:
return new_indiv(name)
Это также делает решение Джеймса более читабельным:
return get_indiv(name) or new_indiv(name)