python 動態創建變量 獲取變量名


參考鏈接https://www.cnblogs.com/technologylife/p/9211324.html

參考鏈接(未)(使用inspect 獲取變量名):https://blog.csdn.net/s740556472/article/details/80928849

更容易理解的(未):https://segmentfault.com/q/1010000000405232

問題:

  為什么要那樣獲取變量名呢?明明都已經把變量名給敲出來了?

需求和要求:

動態產生的變量名應該是有規律的

 

動態創建

使用exec動態賦值

  exec是python3里的內置函數,支持python代碼的動態運行

  這種方式就相當於是執行了語句“var1=1”

if __name__=="__main__":
    for i in range(5):#注意隨意指定的5,可看為個數
        exec('var{}={}'.format(i,i))
    # print (n0)
    print(var1,var2,var3)

#輸出:
1,2,3

  

利用命名空間動態賦值

  在Python的命名空間中,將變量名與值存儲在字典中,
  可以通過locals()globals()函數分別獲取局部命名空間和全局命名空間。

#命名空間動態賦值
if __name__=="__main__":
    names=locals()#關鍵點在這
    for i in range(5):#注意隨意指定的5,可看為個數
        names['n'+str(i)]=i
    # print (n0)
    for i in range(5):
        print(names['n'+str(i)])這樣其實也不算新奇吧?

  

在類中使用動態變量

  python的類對象的屬性儲存在的__dict__中。__dict__是一個詞典,鍵為屬性名,值對應屬性的值。

In [1]: class Test_class(object):
   ...:     def __init__(self):
   ...:         names = self.__dict__#其實和通過命名空間差不多
   ...:         for i in range(5):
   ...:             names['n' + str(i)] = i
   ...:

In [2]: t = Test_class()

In [3]: print(t.n0, t.n1, t.n2, t.n3, t.n4)
0 1 2 3 4

  

調用

事實上,對於重復性的變量,我們一般不會這樣調用變量,如:var0, var1, var2, var3 ,var4....varN,(即自己把變量名寫出來)

 

利用exec函數

  同樣地,可以使用exec調用變量

In [3]: for i in range(5):
   ...:     exec('print(var{}, end=" ")'.format(i))
   ...:
0 1 2 3 4

  

利用命名空間

  因為命令空間的locals()globals()均會返回一個字典,利用字典的get方法獲取變量的值

In [4]: names = locals()

In [5]: for i in range(5):
   ...:    print(names.get('var' + str(i)), end=' ')
      #或者
       print(names['var'+str(i)])
0 1 2 3 4

  

 


免責聲明!

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



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