2016-11-02 106 views
1

我正在学习Python,并且碰到了一些Pythonic奇怪的东西。我无法弄清楚为什么在返回时,这个函数抛出数据。在Python中返回列表

def foo(mylist=None): 
    print "Input: {}".format(mylist) 
    if mylist is None: 
     mylist = list() 
    if len(mylist) == 3: 
     return mylist 
    else: 
     mylist.append(len(mylist)) 
     foo(mylist) 

print "Output: {}".format(foo()) 

此打印:

Input: None 
Input: [0] 
Input: [0, 1] 
Input: [0, 1, 2] 
Output: None 

我猜想,它与指向不再存在的清单做,但我不明白,在一个简单的例子:

def simple_foo(): 
    to_return = [1, 2, 3] 
    return to_return 

print "Simple output: {}".format(simple_foo()) 

我甚至尝试过(在富)深入复制我的列表到to_return变量,然后返回,但似乎并没有工作。任何人都可以对此有所了解吗?我会很感激。

回答

8

你必须保持return ING:

你的递归调用:

foo(mylist) 

需要返回它的返回值:

return foo(mylist) 
+0

谢谢!这甚至不是Python的东西;我应该抓住那个。 –