2

python 将列表作为参数传递给函数时,我遇到了一个奇怪的问题。这是代码:

def foobar(depth, top, bottom, n=len(listTop)):
    print dir(top)
    print top.append("hi")
    if depth > 0:
        exit()
    foobar(depth+1, top.append(listTop[i]), bottom.append(listBottom[i]))

top = bottom = []
foobar(0, top, bottom)

它说“AttributeError: 'NoneType' 对象没有属性 'append'”,因为 foobar 中的 top 是 None 尽管 dir(top) 打印了类型列表的完整属性和方法列表。那么怎么了?我只是想将两个列表作为参数传递给这个递归函数。

4

2 回答 2

12

您将结果传递top.append()给您的函数。top.append()返回无:

>>> [].append(0) is None
True

您需要.append()单独调用,然后传入top

top.append(listTop[i])
bottom.append(listBottom[i])
foobar(depth+1, top, bottom)

请注意,n=len(listTop)函数中的参数是多余的,并且只执行一次,即在您创建函数时。每次调用该函数时都不会对其进行评估。无论如何,您都可以从您在此处发布的版本中安全地省略它。

于 2012-11-25T21:15:48.973 回答
2

top.append(listTop[i])在原地工作并返回None

于 2012-11-25T21:15:07.367 回答