我想以编程方式检查 print 是否是内置的 Python 函数。
dir(__builtins__)从 Python 命令行查询时使用 Python 3.4.x我得到了我正在寻找的内容:
['ArithmeticError', 'AssertionError', ..... , 'pow', 'print' ... ]
Run Code Online (Sandbox Code Playgroud)
但是当在 .py 文件中使用它时:
import sys
def foo:
print(dir(__builtins__))
Run Code Online (Sandbox Code Playgroud)
调用返回:
['__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']
Run Code Online (Sandbox Code Playgroud)
我__builtins__在任何时候都没有重新定义。
引用builtins模块文档:
作为实现细节,大多数模块都将名称
__builtins__作为其全局变量的一部分提供。的值__builtins__通常是此模块或此模块的__dict__属性值。由于这是一个实现细节,它可能不会被 Python 的替代实现使用。
在命令提示符中,您正在查看模块对象,而不是__dict__在 python 文件中运行代码时的对象。的dir()一个词典的距离而不同dir()的模块对象上。
而不是看__builtins__,使用builtins模块:
import builtins
hasattr(builtins, 'print')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |