【趣】Python獲取變量的變量名


兩種不完美的方式:

用locals,globals

用locals獲取變量列表,再遍歷比較對象。

def namestr(obj):
  ns = globals()
  return [name for name in namespace if ns[name] is obj]

其中is比較的是id,但如果a=b,則兩者id相同。

缺點:如果兩個變量a = b,則會返回locals列表中前者。

用inspect模塊

import inspect
import re
def varname(p):
  for line in inspect.getframeinfo(inspect.currentframe().f_back)[3]:
    m = re.search(r'\bvarname\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)', line)
    if m:
      return m.group(1)

缺點: 
1. 實際是取源代碼,如果是:map(lambda i:varname(i), li),最后取出的總是i。 
2. 由於取上層frame,如果是C代碼調的,未知;且作為一個模塊,最好不要和上層有關系。

備注

這兩種方式都有作用上的缺陷,在設計上也不工程ful。實際中少用。


免責聲明!

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



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