这两种python方法之间的区别是什么?

这两种python方法之间的区别是什么?,python,breadth-first-search,Python,Breadth First Search,我是python新手 我有一个python方法,它递归返回列表(previous是string的字典,s只是包含在previous字典中的字符串) 我相信这一次也会得到同样的结果 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:

我是python新手

我有一个python方法,它递归返回列表(previous是string的字典,s只是包含在previous字典中的字符串)

我相信这一次也会得到同样的结果

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'的操作数类型”


我在这里做错了什么?

第二个方法的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
语句。

第二种方法的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
语句对于第二种情况,第二个版本缺少一个
返回
。第一个函数可以理解为
返回(value1 if expr else value2)
,这意味着如果
expr
满足
之间的整个条件)
将被评估为
value1
,而
expr
value2
不满意。在第二个版本中,您忘记了在
else
子句中返回递归调用的结果,因此返回了默认值
None
。谢谢大家!尝试
else:returnpath(previous,previous[s])+[s]
对于第二种情况,第二个版本缺少
return
。第一个函数可以理解为
return(value1 if expr else value2)
,这意味着如果
expr
满足
之间的整个条件
将被评估为
value1
,而
expr
value2
不满意。在第二个版本中,您忘记了在
else
子句中返回递归调用的结果,因此返回了默认值
None
。谢谢大家!非常感谢摩西。但是第一种方法如何只使用一个返回语句呢?@user8079我添加了一些动机来支持答案,非常感谢。但是第一个方法如何只使用一个返回语句呢?@user8079我添加了一些动机来支持这个答案