我正在尝试构建一个函数,该函数使用闭包返回其先前调用的值。第一次调用函数时,它将返回 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
您的方法的问题在于,无论何时调用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)