python:打印从另一个文件接收到的args的变量名称

时间:2018-07-26 14:35:43

标签: python string variables global-variables

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

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,而在后者中则找不到,因为当它在执行该功能的utils.py内时,globals()不包含{{1} },因为它不在文件的全局范围内声明。

所以我们有a给出了本地变量,locals().items()给出了全局变量,如何访问文件间作用域变量堆栈?


更新:

在注释中提到的另一个SO question中,它们正在处理globals().items()中全局范围内定义的变量,而在file1中将不可用,因为{{1 }}仅导入file2的模块。

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

0 个答案:

没有答案