2012-03-01 82 views
4

如何從名稱中獲取int(),float(),dict()等可調用對象?例如,我試圖將Python值保存到xml並將變量類型存儲爲字符串。從字符串轉換回Python類型時,是否有辦法從字符串中獲得可調用的?從函數名獲取內置函數

通常我會做類似getattr(myobj,'str')的東西,但是沒有模塊可以用作這些內置轉換函數的第一個參數。我也嘗試過getattr(object,'str'),但是這不起作用,因爲這些函數不是基類'對象'類型的一部分,而只是全局語言。

回答

13

通常我會做類似getattr(myobj, 'str'),但是沒有模塊可以用作這些內置轉換函數的第一個參數。

錯了,有:

import __builtin__ 
my_str = getattr(__builtin__, "str") 

(在Python 3.X:import builtins

+0

啊哈哈!奇蹟般有效。我試圖在對象和其他類型上使用__builtins__,並不知道它有一個模塊。 – 2012-03-01 19:59:20

0

一個快速的方法是從__builtin__模塊調用它。例如

>>> import __builtin__ 
>>> __builtin__.__dict__['str'](10) 
'10' 
3

你不需要輸入任何東西

vars(__builtins__)['dict'] 
vars(__builtins__)['float'] 
vars(__builtins__)['int'] 

+0

我也喜歡這個解決方案。除了刪除導入之外,是否有任何理由使用它與上面的內置模塊? – 2012-03-01 20:00:29

+0

@ durden2.0:這是不應該依賴的[CPython實現細節](http://docs.python.org/library/__builtin__.html)。最好'導入__builtin__'。 '__builtins__'有時是一個模塊,有時也是一個字典。上面的代碼只能在主模塊中使用,而不能在其他模塊中使用。 – 2012-03-01 20:16:34

+0

@SvenMarnach哦,很高興知道。謝謝!是否有像__builtins__這樣的其他變量可以是模塊或字典,具體取決於實現?我希望有能力在未來轉向pypy或類似的東西。 – 2012-03-01 20:28:58