考虑一个简单的功能:
def sum(a, b):
return a + b
我想累积多次被调用的sum()
的值,并最终将它们保存到文件中。问题是-在哪里累积这些值?
Python中的谁知道如何全局存储可能从代码深处拉出的值的列表?
我希望代码本身是无状态的,所以我不能在“常规”项目文件中累积值。我也不想为此大量重写任何现有代码。相反,我有一个utils.py
文件,其中包含一个装饰器,该装饰器将sum()
的返回值写入accumulate_list
中的全局列表utils.py
中。我可以在要使用它的任何地方导入此装饰器。 utils.py
中的另一个函数在需要参数的accumulate_list
上执行操作(例如,将accumulate_list
的内容写入具有提供路径的文件中,或从其条目中生成一些统计量) ,并对clear()
执行accumulated_list
。
此解决方案基于对这个问题给出的非常好的回答:
How can I track the values of a local variable in Python?
但是,由于以下原因,上述解决方案不能完全解决我的问题:
accumulate_list
是全局的utils.py
。但是我想以这种方式为多个函数积累多个返回值。我需要装饰器的“实例”之类的东西,每个实例都有其自己的accumulate_list
和“保存并清理”方法,但是我不知道可以在哪里初始化这样的类。import decorator
嵌入代码深处是非常人为的,然后,运行该代码的脚本必须检查accumulated_list
是否为空,如果保存,则保存其内容归档,也许...重新运行整个过程以积累另一个值?什么是合适的设计模式?当我想通过“外部”方式在多次迭代中累积某些函数的返回值,而无需将某些列表深入代码中然后又将其探出,而又没有单个全局列表时,然后必须刷新,而不必登录到必须解析的人工文本文件(也许我想写到内存中并对其进行某些处理而不写到磁盘上?)。
**编辑:**我考虑过的一个想法很有用,但是我不知道如何实现,那就是编写一个脚本来运行我的整个项目,同时观察局部值。运行时变量。这些将被收集,我会随心所欲地处理它们。为此,我将需要能够在运行时观察局部变量的值(某些嵌入在代码深处的函数的返回值)。也许我可以使用bytecode module来做到这一点。我不知道。我正在调查。这种方法的一个优点是,我不需要在项目中更改任何一行代码,整个累积过程发生在包裹整个项目的脚本中。