Closure : 一个函数,它返回上一次调用的值

tib*_*ish 2 python

我正在尝试构建一个函数,该函数使用闭包返回其先前调用的值。第一次调用函数时,它将返回 None。我不确定如何将 last_in 从一个调用更新到另一个调用。

def last_in(x):
    last_in = [None]

    def get():
        temp = last_in[0]
        last_in[0] = x
        # print(last_in)
        return temp
    return get()

Run Code Online (Sandbox Code Playgroud)

例如,print(last_in(1),last_in(2),last_in(3))应该打印:None 1 2

tob*_*s_k 5

您的方法的问题在于,无论何时调用last_in,即“外部”函数,存储在last_in(数组,而不是函数)中的先前值都会重置为None。相反,外部函数应该只调用一次,这样每次调用时都不会重置该值。

不确定你需要它做什么,但我认为为此创建一个装饰器函数是有意义的,即修改现有函数的函数。这样,所有的存储和检索最后的结果都可以在装饰器中完成,而不会弄乱实际的功能。外部函数(装饰器)仅被调用一次,原始函数被替换为将正确检索存储值的装饰版本。

def return_previous(f):
    f.last_result = None
    def _f(*args, **kwargs):
        res = f.last_result
        f.last_result = f(*args, **kwargs)
        return res
    return _f

@return_previous
def some_function(x):
    return x**2

print(some_function(1), some_function(2), some_function(3))
# None 1 4
Run Code Online (Sandbox Code Playgroud)