python如何获取变量的变量名
2024-08-31 00:07:47
假设现在存在一个值为1变量名为a的变量,如何通过一个函数获取该变量的变量名a?
上面这个需求来源于某群友的一个要求,希望能有一个这样的函数来方便打印。
这个需求很扯淡啊,为什么不用格式化输出?它回复到‘懒’,好吧,懒确实是程序员技术进步的第一推动力。
从变量名获取变量值
当时第一个想法,从变量获取变量名是相当麻烦的事情,老哥你就用用变量名吧。
def print_var(x:str)->None:
print(s,"=",eval(s))
粗暴简单的eval,完美解决你的困难。
内心小剧场:安全不安全管我何事
使用locals
毫无疑问,这样的方法遭受到群里老哥的拒绝,要多打两个引号,老哥,你也太懒了吧。
虽然python作为一门动态语言,是肯定有反射这个功能的,但是想从变量获取变量名还是很麻烦的。
def get_variable_name(x)->str:
for k,v in locals().items():
if v is x:
return k
def print_var(x)->None:
print(get_variable_name(x),'=',x)
当然上述代码还是有一些小bug的,比如下面的代码,但是无伤大雅,
a = 1
b = 1
print_var(a)
print_var(b)
带着一些小小的得意,另一个群友发来了这样一张回答
气氛瞬间凝固了
另一种通过变量名获取变量值的方法
来源于别人提供的知乎回答
import sys
def append(list_, name):
list_.append((name, sys._getframe().f_back.f_locals[name]))
>>> mylist = []
>>> myvar = 12
>>> append(mylist, 'myvar')
>>> mylist
[('myvar', 12)]
原回答可以作为参考,其中还提供了inspect+re来获取的方法,在这就不赘述了,以免教坏别人。
最新文章
- ISurfaceOp 接口生成等高线
- 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
- 面向对象分析方法(II)
- hdoj1325 Is It A Tree?
- spring获取properties
- (转载)PHP使用header函数设置HTTP头的示例方法表头
- js将对象转成字符串-支持微信
- SpringMVC之数据绑定(转)
- mysql 中的 IF 和 IFNULL 用法
- Codeforces AIM Tech Round (Div. 2)
- ASP.NET - 无限极分类
- CentOs Linux 文件位置标记
- 阿里云手动搭建k8s搭建中遇到的问题解决(持续更新)
- networkx 学习
- Devops step by step
- PID控制器开发笔记之三:抗积分饱和PID控制器的实现
- 剑指offer(45)扑克牌顺子
- 小程序https请求,http网站升到https
- Linux - YUM包管理
- 浅谈Arrays.asList()方法的使用