python - 如何从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>
推荐阅读
- .net - Application Insights 如何拦截 SQL 调用?
- machine-learning - 如何区分 OCR 中的斜线零和八(0-> 8)
- python - 基于先前值和 Python 上的 ID 的重复总和?
- java - 将带括号的逗号分隔字符串传递给列表
- linq - 使用 linq 查询的自定义类型的 F# Linq 扩展方法
- node.js - Elasticsearch 返回类型
- reactjs - 如何在等待服务器响应时使用 typesctip 设置加载进度
- java - 如何在不使用任何服务器的情况下向特定用户发送 USSD 消息?
- javascript - 将鼠标悬停的元素数据与选择的每个元素中的数据进行比较
- android - 边距在 ConstraintLayout 中没有任何约束的一侧不起作用