python如何获取变量的变量名

假设如今存在一个值为1变量名为a的变量,如何经过一个函数获取该变量的变量名a?python

上面这个需求来源于某群友的一个要求,但愿能有一个这样的函数来方便打印。程序员

这个需求很扯淡啊,为何不用格式化输出?它回复到‘懒’,好吧,懒确实是程序员技术进步的第一推进力。安全

从变量名获取变量值

当时第一个想法,从变量获取变量名是至关麻烦的事情,老哥你就用用变量名吧。app

def print_var(x:str)->None:
    print(s,"=",eval(s))

粗暴简单的eval,完美解决你的困难。函数

心里小剧场:安全不安全管我何事code

使用locals

毫无疑问,这样的方法遭受到群里老哥的拒绝,要多打两个引号,老哥,你也太懒了吧。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来获取的方法,在这就不赘述了,以避免教坏别人。

相关文章
相关标签/搜索