假设如今存在一个值为1变量名为a的变量,如何经过一个函数获取该变量的变量名a?python
上面这个需求来源于某群友的一个要求,但愿能有一个这样的函数来方便打印。程序员
这个需求很扯淡啊,为何不用格式化输出?它回复到‘懒’,好吧,懒确实是程序员技术进步的第一推进力。安全
当时第一个想法,从变量获取变量名是至关麻烦的事情,老哥你就用用变量名吧。app
def print_var(x:str)->None: print(s,"=",eval(s))
粗暴简单的eval,完美解决你的困难。函数
心里小剧场:安全不安全管我何事code
毫无疑问,这样的方法遭受到群里老哥的拒绝,要多打两个引号,老哥,你也太懒了吧。blog
虽然python做为一门动态语言,是确定有反射这个功能的,可是想从变量获取变量名仍是很麻烦的。get
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的,好比下面的代码,可是无伤大雅,it
a = 1 b = 1 print_var(a) print_var(b)
带着一些小小的得意,另外一个群友发来了这样一张回答io
气氛瞬间凝固了
来源于别人提供的知乎回答
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来获取的方法,在这就不赘述了,以避免教坏别人。