我有一个奇怪的问题,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)打印了类型列表的完整属性和方法列表。 那么什么是错的?我只是想将两个列表作为参数传递给这个递归函数。
答案 0 :(得分:12)
您将top.append()
的结果传递给您的函数。 top.append()
返回None:
>>> [].append(0) is None
True
您需要单独拨打.append()
,然后只传入top
:
top.append(listTop[i])
bottom.append(listBottom[i])
foobar(depth+1, top, bottom)
请注意,函数中的n=len(listTop)
参数既冗余又只执行一次,即创建函数时。每次调用该函数时都不会对其进行评估。无论如何,您可以从此处发布的版本中安全地省略它。
答案 1 :(得分:2)
top.append(listTop[i])
就位并返回None