【发布时间】:2012-09-27 16:10:05
【问题描述】:
可能重复:
What is the Python equivalent of static variables inside a function?
我尝试编写一个递归函数。它遍历一个向量并给出一个取决于当前值和先前值的值。在 Matlab 中,我可以在函数内部声明一个变量为persistent,并在函数调用后将值存储在内存中,因此函数的下一次调用从以前的值开始。
这就是我开始的简单移动平均线:
def AvgFilter(x):
if not firstRun: # checks if runs for first time, i.e. firstRun is empty
k = 1 # setup initial variables if run for first time
prevAvg = 0 # prevAvg - the average calculated during last call
firstRun = 1 # only for initialisation
alpha = (k-1)/k
avg = alpha * prevAvg + (1 - alpha)*x
prevAvg = avg
k = k + 1
return avg
我需要在函数调用之间记住变量 k prevAvg firstRun。我读到它可以通过装饰器完成,我确实尝试在函数之前设置@counter 来实现它,但不确定我应该如何实现它。装饰器是唯一的方法(没有找到其他东西)?以及如何编写计数器函数来存储我的变量?我有点担心,以后有更复杂的递归我会完全迷失在装饰器的想法上。
【问题讨论】: