2010-05-17 44 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

相關問題