參考鏈接: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
