存储为“无”类型的空列表变量

时间:2013-05-20 20:06:29

标签: python list python-3.x windows-7-x64

我正在尝试在Python 3.3.2中编写一个简短的函数。这是我的模块:

from math import sqrt
phi = (1 + sqrt(5))/2
phinverse = (1-sqrt(5))/2

def fib(n): # Write Fibonacci numbers up to n using the generating function
    list = []
    for i in range(0,n):
        list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))
    return(list)

def flib(n): # Gives only the nth Fibonacci number
    return(int(round((phi**n - phinverse**n)/sqrt(5), 0)))

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

当我运行fibo.fib(6)时,出现以下错误:

    list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))
AttributeError: 'NoneType' object has no attribute 'append'

如何纠正此错误?

3 个答案:

答案 0 :(得分:7)

的返回类型
list.append

None

执行list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

分配list=None

只做

for i in range(0,n):
    list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

此外,list是内置类型。所以使用不同的变量名。

答案 1 :(得分:1)

append调用不返回列表,它将在适当的位置更新。

list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

应该成为

list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

您可能还应该将参数称为list之外的其他内容,因为它也用于标识列表类。

答案 2 :(得分:0)

你也可以使用列表理解:

def fib(n):
    '''Write Fibonacci numbers up to n using the generating function'''

    return [int(round((phi**i - phinverse**i)/sqrt(5), 0))) for i in range(0, n)]