如何按名称查找任何范围内的属性?

时间:2010-05-17 16:44:53

标签: python

如何按名称查找任何范围内的属性?我的第一个试验是使用globals()和locals()。 e.g。

>>> def foo(name):
...   a=1
...   print globals().get(name), locals().get(name)
...
>>> foo('a')
None 1
>>> b=1
>>> foo('b')
1 None
>>> foo('foo')
<function foo at 0x014744B0> None

到目前为止一切顺利。但是它无法查找任何内置名称。

>>> range
<built-in function range>
>>> foo('range')
None None

>>> int
<type 'int'>
>>> foo('int')
None None

有关如何查找内置属性的想法吗?

3 个答案:

答案 0 :(得分:4)

>>> getattr(__builtins__, 'range')
<built-in function range>

答案 1 :(得分:2)

使用__builtin__(最后没有s,如Triptych和Duncan建议的那样):

>>> import __builtin__
>>> getattr(__builtin__, 'range')
<built-in function range>

__builtins__具体为CPython-implementation因此会降低您的代码的可移植性。

答案 2 :(得分:0)

使用__builtins__“superglobal”。它包含您正在寻找的内容