这两种python方法之间的区别是什么?
我是python新手 我有一个python方法,它递归返回列表(previous是string的字典,s只是包含在previous字典中的字符串) 我相信这一次也会得到同样的结果这两种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:
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我添加了一些动机来支持这个答案