python - 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
我如何访问传递的参数的名称?(而且我没有看到与此相关的安全性或依赖性缺陷,因为它已经可以访问该变量,我只想要他们的名字)
解决方案
推荐阅读
- sql - 连接 SQL 变量中的 CASE 值
- c# - Xamarin.Android - 向布局设计器添加版本
- tensorflow - 我最近在使用 tf.frompixels 时遇到了一个错误,这是我以前没有遇到的。下面是我正在使用的代码
- javascript - 创建 ID 不相互跟随的父子树 JSON
- java - Java Swing 计时器第一个实例崩溃
- javascript - Javascript - 带有 switch 语句的石头、纸、剪刀?如果不是,有什么替代方案?
- android - Android 相当于 iOS 的“缩放填充”
- laravel - Laravel Eloquent 计算多个数据范围
- django - 如何为两因素身份验证配置 Django Authy
- sql - SQL 将范围拆分为单行