Синтаксис Python для IF / THEN по сравнению с PHP - PullRequest
1 голос
/ 19 апреля 2011

У меня есть этот код в PHP:

 if($id = $this->ci->srr->check_faca_indiv($name))
{
    return $id;
} elseif($id = $this->_addIndiv($name)) {
    return $id;
} else {
    return null;

Я использую эту базовую структуру повсеместно, и она может быть не очень хорошей, но к этому я привык. Функции в основном пытаются выполнить несколько простых операций, и в случае неудачи они возвращают нулевое значение. Я пытался имитировать это при переносе на Python, но получил синтаксические ошибки и в итоге изменил его на это:

indiv_id = checkIndiv(name)
if indiv_id != None:
    return indiv_id
indiv_id = addIndiv(name)
if indiv_id != None:
    return indiv_id
else:
    return None

Я думаю, что это приводит меня в одно и то же место, но мне это не очень нравится - есть ли способ, похожий на PHP, который мне не хватает?

Ответы [ 2 ]

5 голосов
/ 19 апреля 2011

что-то вроде:

return checkIndiv(name) or addIndiv(name)
2 голосов
/ 19 апреля 2011

Основная проблема с вашим кодом в том, что последняя ветвь не имеет смысла. Даже в вашем примере с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...