这两个 python 方法有什么区别?

What is the difference between these two python methods?

我是 python 新手。

我有一个 python 方法 returns 递归列表(前面是字符串字典,s 只是包含在前面字典中的字符串)

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]

我认为这个应该 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:
        path(previous, previous[s]) + [s]

我原以为这两种方法在功能方面完全相同,只是第一种更简洁。但是,当我 运行 第二种方法时,

我收到以下错误:

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

我做错了什么?

您在第二种方法的 else 分支中缺少 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 语句。