如何在python中的函数调用之间传递隐藏变量

时间:2015-09-18 07:19:08

标签: python python-2.7 python-3.x

我的问题是我必须在不同的功能之间传递trace_id

因此,如果funA calls funB, funB calls funC and funC calls funD,我会在funA生成一个trace_id,并在funD访问它。此trace_id必须是本地堆栈。

但是我不想将它作为参数传递,而是作为隐藏变量传递。原因是funA and funD是我的框架的一部分,而框架的用户写funB and funC.

我可以检查当前帧但问题是funA被装饰并且装饰器生成了这个trace_id。所以使用

trace_id = frame[0].f_locals.get('x_trace_id', None)

不起作用。

我现在能做什么?

1 个答案:

答案 0 :(得分:1)

在Python中,funA和funD很容易通过import语句访问共享的全局命名空间。如果它们都导入模块,则该模块中的名称将被共享。这样,您就可以在不修改干预呼叫的情况下在它们之间共享数据。

您提到要分享的变量在某种意义上应该是堆栈或线程本地的。为了使其工作,您可以使“全局”模块中的共享对象成为由标识符键入的字典,例如,线程ID。在这种情况下,frame[0]是可能的。