如何累积局部变量值

时间:2018-09-17 15:36:11

标签: python wrapper

考虑一个简单的功能:

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来做到这一点。我不知道。我正在调查。这种方法的一个优点是,我不需要在项目中更改任何一行代码,整个累积过程发生在包裹整个项目的脚本中。

0 个答案:

没有答案