Python内置函数dir的结果不一致。

3

我想通过程序来检查print是否为Python内置函数。

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

1个回答

5
引用builtins模块文档

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

在命令提示符中,运行python文件时,您查看的是模块对象,而不是__dict__对象。 字典的dir()与模块对象上的dir()相当不同。
与其查看__builtins__,不如使用builtins模块:
import builtins

hasattr(builtins, 'print')

可以了!感谢你的出色解释。 - Willeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接