我想以编程方式检查print是否是内置的Python函数。
从Python命令行查询dir(__builtins__)
时使用Python 3.4.x我得到了我正在寻找的内容:
['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__
。
答案 0 :(得分:4)
引用builtins
module documentation:
作为实现细节,大多数模块都将名称
__builtins__
作为其全局变量的一部分提供。__builtins__
的值通常是此模块或此模块的__dict__
属性的值。由于这是一个实现细节,因此Python的替代实现可能不会使用它。
在命令提示符下,当您在python文件中运行代码时,您正在查看模块对象与__dict__
对象。字典的dir()
与模块对象上的dir()
完全不同。
不要查看__builtins__
,而是使用builtins
模块:
import builtins
hasattr(builtins, 'print')