如何设计一种每调用 20 次初始化一次的算法?



我设计了一个函数,当事件发生时调用它。然而,我需要这个函数来计算给它的价格的平均值,直到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中的数据。

最新更新