Python:这个Fibonacci函数有什么问题?

Sid*_*Sid 0 python iterator fibonacci

我试着编写一个简单的python函数,它应该返回一些指定最大值的fib数列表.但是我收到了这个错误.我似乎无法找出我做错了什么.

def fib(a,b,n):
    f = a+b
    if (f > n):
        return []
    return [f].extend(fib(b,f,n))

>>>fib(0,1,10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "lvl2.py", line 35, in fib
    return [f].extend(fib(b,f,n))
  File "lvl2.py", line 35, in fib
    return [f].extend(fib(b,f,n))
  File "lvl2.py", line 35, in fib
    return [f].extend(fib(b,f,n))
  File "lvl2.py", line 35, in fib
    return [f].extend(fib(b,f,n))
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)

小智 9

list.extend就地扩展列表.您可以使用+运算符将两个列表连接在一起.

但是,您的代码并不是特别Pythonic.您应该使用生成器来生成无限序列,或者作为对代码的略微改进:

def fib(a,b,n):
    data = []
    f = a+b
    if (f > n):
        return data
    data.append(f)
    data.extend(fib(b,f,n))
    return data
Run Code Online (Sandbox Code Playgroud)

使用生成器进行无限序列的示例:

def fibgen(a, b):
    while True:
        a, b = b, a + b
        yield b
Run Code Online (Sandbox Code Playgroud)

您可以使用创建生成器fibgen()并使用拉出下一个值.next().