python 如何从另一个模块获取变量名
How to get variable name from another module in 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)
我一无所获。
如何获得与前一个相同的输出?
您的 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>
当我执行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)
我一无所获。
如何获得与前一个相同的输出?
您的 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>