2010-10-07 71 views
1

我有一个简单的代码,可以使用存储在字典中的图形来查找路径。该代码是完全相同:可变默认参数返回无

def find_path(dct, init, depth, path=[]): 
    if depth == 0: 
     return path 
    next_ = dct[init] 
    depth-=1 
    find_path(dct, next_, depth) 

如果我打印正确的路径return path之前它打印到屏幕的正确路径(的5的初始深度后)。但是,返回的值是None。我不知道发生了什么事!

为什么path的值正好高于return是正确的,但返回的路径不是我想要的?

回答

3

不应该在该

find_path(dct, next_, depth) 

return find_path(dct, next_, depth) 
# ^^^^ 
# Return 

在Python(不像在说,红宝石),你必须明确地return的值。否则返回None

+0

是的,但我想知道为什么正确路径上方的路径参数是正确的,但它不返回。 BTW。您的修复DID解决了问题。非常感谢! – Escualo 2010-10-07 06:54:47

+3

因为它将它返回到下一个级别......但是那个级别永远不会将它传递给链条。 'return'不会自动将一个值传递给递归调用堆栈;一次只有一个级别。 – Amber 2010-10-07 07:01:23

1

因为你用depth调用它大于0,这会导致它掉下来并返回None

+0

谢谢,@Ignacio。像往常一样,一个很好的答案。 – Escualo 2010-10-07 21:36:16