2016-09-20 9 views
0

Я новичок в python.В чем разница между этими двумя методами python?

У меня есть один метод питона, который возвращает список рекурсивно (предыдущий является словарь строки и с только строка, которая включена в предыдущем словаре)

def path(previous, s): 
    "Return a list of states that lead to state s, according to the previous dict." 
    return [] if (s is None) else path(previous, previous[s]) + [s] 

и это тот, который я считаю, должны вернуться тот же результат

def path(previous, s): 
    "Return a list of states that lead to state s, according to the previous dict." 
    if s is None: 
     return [] 
    else: 
     path(previous, previous[s]) + [s] 

Я ожидал, что функциональность мудры эти два метода являются абсолютно идентичными, это только то, что первый из них является более consice. Однако, когда я запускаю второй методы,

Я получаю следующее сообщение об ошибке:

"TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'"

Что я делаю неправильно здесь?

+0

Попробуйте 'else: return path (previous, previous [s]) + [s]' для второго случая –

+2

Во второй версии отсутствует 'return'. –

+0

Первая функция может быть прочитана как «return (value1 if expr else value2)», что означает, что если 'expr' выполняется, весь термин между' ('и') 'будет оцениваться как' value1' и 'expr' не удовлетворяет 'value2'. Затем возвращается. – Phidelux

ответ

4

Вы не нашли return заявление в ветви второго метода еще:

def path(previous, s): 
    "Return a list of states that lead to state s, according to the previous dict." 
    if s is None: 
     return [] 
    else: 
     return path(previous, previous[s]) + [s] 

Первый подход использует тройной оператор которого возвращается значение (один из двух) является вернулся в соответствии с оператором return, для второго требуется инструкция return в обеих ветвях.

+0

большое спасибо Моисей. Но как первый метод работает с одним возвратным выражением? – user8079

+0

@ user8079 Я добавил некоторую мотивацию, поддерживающую ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^