如何從名稱中獲取int(),float(),dict()等可調用對象?例如,我試圖將Python值保存到xml並將變量類型存儲爲字符串。從字符串轉換回Python類型時,是否有辦法從字符串中獲得可調用的?從函數名獲取內置函數
通常我會做類似getattr(myobj,'str')的東西,但是沒有模塊可以用作這些內置轉換函數的第一個參數。我也嘗試過getattr(object,'str'),但是這不起作用,因爲這些函數不是基類'對象'類型的一部分,而只是全局語言。
如何從名稱中獲取int(),float(),dict()等可調用對象?例如,我試圖將Python值保存到xml並將變量類型存儲爲字符串。從字符串轉換回Python類型時,是否有辦法從字符串中獲得可調用的?從函數名獲取內置函數
通常我會做類似getattr(myobj,'str')的東西,但是沒有模塊可以用作這些內置轉換函數的第一個參數。我也嘗試過getattr(object,'str'),但是這不起作用,因爲這些函數不是基類'對象'類型的一部分,而只是全局語言。
通常我會做類似
getattr(myobj, 'str')
,但是沒有模塊可以用作這些內置轉換函數的第一個參數。
錯了,有:
import __builtin__
my_str = getattr(__builtin__, "str")
(在Python 3.X:import builtins
)
一個快速的方法是從__builtin__
模塊調用它。例如
>>> import __builtin__
>>> __builtin__.__dict__['str'](10)
'10'
你不需要輸入任何東西
vars(__builtins__)['dict']
vars(__builtins__)['float']
vars(__builtins__)['int']
等
我也喜歡這個解決方案。除了刪除導入之外,是否有任何理由使用它與上面的內置模塊? – 2012-03-01 20:00:29
@ durden2.0:這是不應該依賴的[CPython實現細節](http://docs.python.org/library/__builtin__.html)。最好'導入__builtin__'。 '__builtins__'有時是一個模塊,有時也是一個字典。上面的代碼只能在主模塊中使用,而不能在其他模塊中使用。 – 2012-03-01 20:16:34
@SvenMarnach哦,很高興知道。謝謝!是否有像__builtins__這樣的其他變量可以是模塊或字典,具體取決於實現?我希望有能力在未來轉向pypy或類似的東西。 – 2012-03-01 20:28:58
啊哈哈!奇蹟般有效。我試圖在對象和其他類型上使用__builtins__,並不知道它有一個模塊。 – 2012-03-01 19:59:20