2012-03-01 87 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