2017-08-11 72 views
1

这里我用一个简单的代码来说明我遇到什么:递归不能追加列表

def recTry(inList): 
    print(inList) 
    if len(inList) < 10: 
     recTry(inList.append(1)) 

我用递归希望它会变得像[1][1, 1][1, 1, 1] ...... 但实际上,运行,将产生这样的:

>>> recTry([1]) 
[1] 
None 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 4, in recTry 
    File "<stdin>", line 3, in recTry 
TypeError: object of type 'NoneType' has no len() 

inList成为自第二递归None。 那么我如何编码以使inList附加每个递归?

+2

你的函数缺少'return'语句,因此它变成'None' –

+2

另外'inList.append(1)'返回'None'。您需要先追加1,然后将该列表传递给递归调用 –

回答

1

inList.append(1)回报None所以你通过None而递归

你可以做的是:

def recTry(inList): 
    print(inList) 
    if len(inList) < 10: 
     inList.append(1) 
     recTry(inList) 
    else: 
     return inList 
1

您尝试调用函数inList.append(1)的结果,但它是无 尝试:

if len(inList) < 10: 
    inList.append(1) 
    recTry(inList) 
0

这是Python中的约定,该变异序列的方法返回None。因此,您首先通过的价值不会返回您的问题。

0

你的函数的4号线,追加后

recTry(inList.append(1)) 

inList.append(1)回报无1到现有列表。这None是你传递给recTry方法。你可以试试这个,而不是使每个递归附加的inList

inList.append(1) recTry(INLIST)