2010-05-17 93 views
4

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

>>> 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 

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

回答

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

完美!谢谢! – 2010-05-17 16:58:26

0

使用“超全球”__builtins__。它包含了你(在像三联和邓肯最终没有s建议)寻找什么

2

使用__builtin__

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

__builtins__是特定CPython-implementation从而使您的代码的可移植性。

+0

谢谢!我没有注意到'__builtins__'和'__builtin__'之间的细微区别。 – 2010-05-17 17:00:41

相关问题