首页 > 解决方案 > python:打印从另一个文件收到的参数的变量名

问题描述

我需要打印变量名,所以我做了:

def get_variable_name(x):
    local_matches = [k for k, v in locals().items() if v is x]
    global_matches = [k for k, v in globals().items() if v is x]

    print(local_matches, global_matches)
    return global_matches[0]

a = 5
print(get_variable_name(a))

# output
# (['x'], ['a'])
# a

现在已经很完美了,但是现在我需要get_variable_name在我的项目中的很多地方使用这个功能。所以我把这个函数移到了utils.py,我们现在可以导入它并像这样使用它:

from scripts.utils import get_variable_name
a = 5
print(get_variable_name(a))

# output
# (['x'],[])
# ! can't access index 0 exception
# ! since the list is empty

显然,在前者中, a 在全局 var 堆栈中找到,而在后者中则没有,因为当它在utils.py执行此函数内部时,globals()不包含a,因为它没有在(文件的)全局范围内声明。

所以我们必须locals().items()给出局部变量,而globals().items()对于全局变量,我如何访问文件间范围变量堆栈?


更新:

在评论中提到的另一个 SO问题中,他们正在处理在全局范围中定义的变量file1,这将不可用,file2因为file1仅导入file2.

但是在这里,我将这些变量发送到file2它可以访问的值,显然,file2我如何访问传递的参数的名称?(而且我没有看到与此相关的安全性或依赖性缺陷,因为它已经可以访问该变量,我只想要他们的名字)

标签: pythonstringvariablesglobal-variables

解决方案


推荐阅读