假設如今存在一個值爲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來獲取的方法,在這就不贅述了,以避免教壞別人。