我正在构建一个函数,该函数接收"块"数据并迭代处理它们。 我的问题是如何保存下一次运行的最后一个参数,同时仍然在第一次运行中初始化它。
例:
def IterativeFunction(X): #X is the received vector (chunk of data)
for i in range(len(X)):
Y[i] = 0.1 * X[i] + 0.9 * Xn1
Xn1 = X[i] #This is the iterative part
return(Y)
main 函数将接收"Y",然后发送下一个"块"。 所以我需要迭代函数再次运行,并将"Xn"初始化为:"Xn1 = X[i](上次运行("。 我仍然需要在第一次运行时将 Xn1 初始化为"Xn1 = 0"。
建议的解决方案:
我当然可以返回"Xn1"并从"main"再次接收它,但我相信有更好的方法来实现这一点。
您可以将Xn1
传递给函数,并在每次调用函数时将Xn1
与Y
一起返回。在第一次中,它将丢失或None
(或您选择的任何其他默认值(,然后对其进行初始化。
P.S 请注意,Y
从未初始化,因此在原始代码中Xn1
。
素描-
def IterativeFunction(X, Xn1=None):
if Xn1 is None:
Xn1 = initialize
for i in range(len(X)):
Y[i] = 0.1 * X[i] + 0.9 * Xn1
Xn1 = X[i]
return(Y, Xn1)
您可以使用变量来跟踪运行函数的次数,因此第一次运行可以运行一段代码,其余部分可以运行另一段代码,如下所示:
run_times = 0
def IterativeFunction(X): #X is the received vector (chunk of data)
run_times += 1
if run_times == 1:
for i in range(len(X)):
Y[i] = 0.1 * X[i] + 0.9 * Xn1
Xn1 = X[i] #This is the iterative part
else:
blablah
return(Y)
不确定您希望它以哪种方式工作,但您明白了
感谢您的上述回答。我把你的想法组合成这样:
def Main_function():
#init
Xn1 = 0
#Code part
...code code code...
call IterativeFunction( VectorX , Xn1)
end
def IterativeFunction( VectorX , Xn1):
for i in range(len(X)):
Y[i] = 0.1 * X[i] + 0.9 * Xn1
Xn1 = X[i]
return (Y , Xn1)
我的问题是关于实现此目的的其他方法,例如全局参数? 或者这是实现解决方案的最推荐方法?