我设计了一个函数,当事件发生时调用它。然而,我需要这个函数来计算给它的价格的平均值,直到20个数字,当它小于20个数字时,什么都不做,当它计算出20个数字后,将列表重置为零。但我做不到。
这样做的逻辑是,当程序启动(初始化)时,它会调用此函数,对于任何价格变化事件,都会调用该函数,但是,根据前20次价格变化,程序决定采取措施,然后直到程序发生错误时才调用。然而,下次重新启动程序时,它仍然具有svm20average之前的值,并且只计算最后一个价格和几天前初始化程序时的19个价格。
svm20average = []
def order_function(price_x, price_y):
price_x = price_x
price_y = price_y
svm20average.append(price_x)
if len(svm20average) < 20:
print 'Calculating n'
elif len(svm20average) >= 20:
t = []
for i in range(len(svm20average)):
t.append(svm20average[i]-svm20average[0])
print '.'
xt = np.asarray(t)
yt = np.average(xt)
order_executer(yt, price_x, price_y)
svm20average = []
这就是错误:
svm20average.append(price_x)
UnboundLocalError: local variable 'svm20average' referenced before assignment
更新:我有一个从未存在的主程序调用了这个函数。这就是问题所在。我有一个主要功能,它连接到服务器并从服务器获取一条线路,永远如此。每次提取一行时,都会调用此算法,但是,第一次调用此算法时,它会计算前20个平均值,并将其传递给另一个函数order_executer。然后,除非在几天后再次提取特定的行,否则不会调用此函数。然而,这一次再次调用该算法,其中19个数字来自之前,只有最后一个价格来自最后一次调用。
更新2:我试过了,del svm20average[:]和del svm20 average[:-20],它们不起作用,因为它说svm20verage未解决,当放在循环外和放在循环内时都会导致问题。请阅读评论了解更多详细信息。
您的代码为svm20average
提供了一个local variable referenced before assignment
错误。这意味着您引用的是在函数外部声明的变量,这意味着它不存在于order_function
的范围内。为了让你的代码按原样运行,它必须作为输入传入这个数组,这样函数才能访问它,比如:
def order_function(price_x, price_y, array):
price_x = price_x
price_y = price_y
array.append(price_x)
# etc
你可以这样称呼它:
svm20average = []
order_function(pricex, pricey, svm20average)
此外,您可以通过执行del svm20average[:]
来清除svm20average中的数据。