从函数名获取内置函数
如何从名称中获取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