Python 如何修复我的函数?

Python 如何修复我的函数?,python,function,Python,Function,有人告诉我。。从评论到修复我的功能,让它看起来更“干净”。我已经试过很多次了。。但我不知道如何使用llambda来完成我想做的事情。我的代码有效。。这不是人们对我的要求 下面是我的代码,以及如何修复它的建议 def immutable_fibonacci(position): #define a lambda instead of def here def compute_fib (previousSeries, ignore): newList = previ

有人告诉我。。从评论到修复我的功能,让它看起来更“干净”。我已经试过很多次了。。但我不知道如何使用llambda来完成我想做的事情。我的代码有效。。这不是人们对我的要求

下面是我的代码,以及如何修复它的建议

def immutable_fibonacci(position):

    #define a lambda instead of def here
    def compute_fib (previousSeries, ignore):
        newList = previousSeries

        if len(newList) < 2: # Do this outside and keep this function focused only on returning a new list with last element being sum of previous two elements
           newList.append(1)

        else:
           first = newList[-1]
           second = newList[-2]
           newList.append(first+second)
        return newList

    range=[None]*position
    return reduce(compute_fib, range, []) 

#Above is too much code. How about something like this:
#next_series = lambda series,_ : (Use these instead of the above line)
#return reduce(next_series, range(position - 2), [1, 1])

append
函数返回None。您需要返回一个更新的数组

next_series = lambda series: series + [series[-1] + series[-2]]
此外,重命名
范围
也没有任何作用

def immutable_fibonacci(position):
    next_series = lambda series: series + [series[-1] + series[-2]]
    return reduce(next_series, range(position - 2), [1, 1])

这是假设您只调用位置>=2的函数。按照惯例,fib(0)是0,fib(1)是1。

一般来说,重新定义
范围可能不是一个好主意。
什么是不可变的?该代码的整个设计都很疯狂。为什么要使用
reduce
None
值列表,而不是简单的
for
循环?这仍然不起作用。。。虽然这比我做的更有意义。我得到一个错误,列表对象在第3行不可调用。它需要计算长度为0或1的斐波那契序列吗?基本上,我要发送的位置是6。它应该计算1,1,2,3,5,8
def immutable_fibonacci(position):
    next_series = lambda series: series + [series[-1] + series[-2]]
    return reduce(next_series, range(position - 2), [1, 1])