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來獲取的方法,在這就不贅述了,以避免教壞別人。

相關文章
相關標籤/搜索