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

时间:2016-09-20 14:38:12

标签: python breadth-first-search

我是一个蟒蛇新手。

我有一个python方法以递归方式返回列表(上一个是字符串的字典,而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]

这个我相信应该返回相同的结果

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:+不支持的操作数类型+:'NoneType'和'list'”

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

您在第二种方法的 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语句返回,因此,第二种方法需要一个{两个分支中的{1}}语句。