Python目录内置不一致

时间:2014-10-01 09:42:56

标签: python python-3.x

我想以编程方式检查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__

1 个答案:

答案 0 :(得分:4)

引用builtins module documentation

  

作为实现细节,大多数模块都将名称__builtins__作为其全局变量的一部分提供。 __builtins__的值通常是此模块或此模块的__dict__属性的值。由于这是一个实现细节,因此Python的替代实现可能不会使用它。

在命令提示符下,当您在python文件中运行代码时,您正在查看模块对象与__dict__对象。字典的dir()与模块对象上的dir()完全不同。

不要查看__builtins__,而是使用builtins模块:

import builtins

hasattr(builtins, 'print')