python如何獲取變量的變量名


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM