首页 > 解决方案 > 如何从python中的另一个模块获取变量名

问题描述

当我执行test.py

tests.py

class A():
    def prints(self,*f):
        for j in f:
            for i in globals():
                if globals()[i]==j:
                    print(f'{i}={j}')
            

s=3;id=2 #it will discard when executing main.py
a=A()
a.prints(s,id)

我得到输出:

s=3 id=2

但是如果我从另一个程序导入

main.py

from tests import A
if __name__ =='__main__':
    
    id=3
    s=1
    a=A()
    a.prints(s,id)

我什么都得不到。

如何获得与前一个相同的输出?

标签: pythonpython-3.xclassglobal-variables

解决方案


您的prints功能无法扩展。如果有多个具有相同值的变量提供给函数会发生什么?

这就是你想要的

In [1]: import sys

In [2]: class A():
   ...:     def prints(self,*f):                                                                        ...:         # get the caller's frame with sys._getframe
   ...:         frame = sys._getframe(1)
   ...:         # get all variables in the caller's namespace
   ...:         all_vars = frame.f_locals
   ...:         for j in f:
   ...:             for i in all_vars:
   ...:                 if all_vars[i]==j:
   ...:                     print(f'{i}={j}')
   ...:

In [3]: a = A()

In [4]: a.prints(a)
a=<__main__.A object at 0x763c377790>

推荐阅读