[英]Python: How to use an object name to call the object itself and also as a string
[英]How can I use a string with the same name of an object in Python to access the object itself?
例如,在下面的代碼中,我想使用x作為參考獲得列表[1,2,3]。
In[1]: pasta=[1,2,3]
In:[2]: pasta
Out[2]: [1, 2, 3]
In [3]: x='pas'+'ta'
In [4]: x
Out[4]: 'pasta'
你要做的是一個不好的做法。
你真正需要的是一個dict
:
>>> dct = {'pasta': [1,2,3]}
>>> x = 'pas' + 'ta'
>>> dct[x]
[1, 2, 3]
這是您嘗試實現的實際任務的正確數據結構 :使用字符串訪問對象。
其他答案建議(或只是表現出來)以不同的方式來做到這一點。 由於Python是一種非常靈活的語言,你幾乎總能找到一種特定任務的不同方式,但“應該有一種 - 最好只有一種 - 明顯的方式” [1] 。
所有這些人都會做這項工作,但並非沒有缺點:
locals()
的可讀性較低,不必要的復雜,在某些情況下也存在風險(參見Mark Byers的回答)。 如果你使用locals()
你將把真正的變量和數據庫變量混合在一起,這很麻煩。 eval()
很簡單,是一種“動態獲取動態源代碼的快捷方式” [2],也是一種不好的做法 。 如果對正確的選擇方式存在疑問,那么遵循Python的Zen可能就是一個開始。
嘿,甚至可以使用InteractiveInterpreter
來使用字符串訪問對象,但這並不意味着我要去。
好吧,要做你真正要求的,你可以使用locals
:
>>> locals()[x]
[1, 2, 3]
然而,這樣做幾乎總是一個壞主意。 正如Sven Marnach在評論中指出的: 保持數據不受變量名稱的影響 。 將變量用作數據也可能存在安全風險。 例如,如果變量的名稱來自用戶,則他們可能能夠讀取或修改您從未打算訪問的變量。 他們只需要猜測變量名稱。
這將是更好的使用字典來代替。
>>> your_dict = {}
>>> your_dict['pasta'] = [1, 2, 3]
>>> x = 'pas' + 'ta'
>>> your_dict[x]
[1, 2, 3]
像其他指出的那樣,你通常應該避免這樣做,只使用字典(在你給出的例子中)或在某些情況下使用列表(例如,而不是使用my_var1, my_var2, my_var3
- > my_vars
)。
但是,如果你仍然想這樣做,你有幾個選擇。
你可以這樣做:
locals()[x]
要么
eval(x) #always make sure you do proper validation before using eval. A very powerfull feature of python imo but very risky if used without care.
如果面食是一個對象屬性,您可以通過以下方式安全地獲取它:
getattr(your_obj, x)
用這個
hello = [1,2,3]
print vars()['hello']
返回[1, 2, 3]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.