2014-10-01 33 views
1

我想以編程方式檢查print是否是內置的Python funcion。Python dir builtins不一致

使用Python 3.4.x時從Python命令行查詢dir(__builtins__)我得到了我在尋找:

['ArithmeticError', 'AssertionError', ..... , 'pow', 'print' ... ] 

但是,在一個.py文件使用時:

import sys 

def foo: 
    print(dir(__builtins__)) 

通話回覆:

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', 
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', 
'__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', 
'__len__', '__lt__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__setitem__', 
'__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 
'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 
'update', 'values'] 

我還沒有重新定義__builtins__在y點。

回答

3

引述builtins module documentation

作爲一個實現細節,大多數模塊的名稱爲__builtins__作爲其全局的一部分提供。 __builtins__的值通常是此模塊或此模塊的__dict__屬性的值。由於這是一個實現細節,它可能不會被替代的Python實現使用。

在命令提示符中,您正在查看模塊對象,而在python文件中運行代碼時正在查看__dict__對象。字典的dir()與模塊對象上的dir()相當不同。

而不是看__builtins__,使用builtins模塊:

import builtins 

hasattr(builtins, 'print') 
+0

對我的作品!謝謝你的解釋。 – Willeman 2014-10-01 09:58:11