【问题标题】:is there any way to write a function such that when call it save the passing data有没有办法编写一个函数,以便在调用它时保存传递的数据
【发布时间】:2022-01-13 06:44:31
【问题描述】:

是否可以编写一个函数,以便在每次调用时保存数据;例如-以下函数接受两个参数 x 和 y;其中 x 是数据,y 是数组大小。 第一次调用该函数,它将创建 y 维数组,用 x 值填充第一个位置,在第二次调用中,它将填充数组的第二个位置并继续,当其中至少有 2 个值时,它将返回一个平均值大批。数组大小是固定的,如果调用函数超过y次,它将删除第一个数据(FIFO)。

def storedata(x,y):
    return z

【问题讨论】:

  • 使用全局变量来保存调用之间的信息。然后你可以检查变量的值来看看该怎么做。
  • 这对于一个类来说会很好用,你可以将调用之间的信息保存在属性中。

标签: python python-3.x function


【解决方案1】:

您可以使用global variables 将您的数据保存在其中并在您的函数之间调用它们。

查看此页面:What is the pythonic way of saving data between function calls? 如果您想使用类和属性解决方案,也许可以解决您的问题。

【讨论】:

  • 我正在考虑将此函数保存在另一个文件中,而不是我的主程序文件中,因此 global 在这里没有帮助。我会检查那个链接。谢谢!
  • @Sanjib 并不是说​​全局变量是一个好的解决方案(使用类),但您可以在另一个文件中拥有全局变量。
【解决方案2】:

当你想存储数据时,你应该使用一个类。

下面给出一个小例子,但是请在网上查找教程和示例,以充分了解python中类和OOP的工作原理。

class Storedata:
    def __init__(self, x, y):
        self.arr = []
        self.max_arr_size = y
        self.add_data(x)
    def add_data(self, x):
        if len(self.arr) < self.max_arr_size:
            self.arr.append(x)
    def __call__(self):
        return sum(self.arr)/len(self.arr)

storedata = Storedata(3, 5)
print(storedata.arr)
>>> [3]
print( storedata() )
>>> 3.0
storedata.add_data(5)
print( storedata() )
>>> 4.0

【讨论】:

    【解决方案3】:

    感谢大家的解决方案。使用类是一个好方法,但我想我正在寻找以下代码。

    def storedata(x, y):
        if not hasattr(storedata, 'z'):
            storedata.z = np.zeros(y, dtype=float)
        storedata.z = np.roll(storedata.z, 1)
        storedata.z[0] = x
        storedata.z[storedata.z == 0] = np.nan
        return storedata.z, np.nanmean(storedata.z)
    
    
    for i in range(1, 11):
        print(storedata(x=i, y=10))
    
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多