AFAIK,Pythonbuiltins
指的是以下中包含的异常和函数__builtins__
:
>>> import builtins # import __builtin__ in Python 2
>>> dir(builtins) # dir(__builtin__) for Python 2
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',
'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',
...many more...
'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed',
'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum',
'super', 'tuple', 'type', 'vars', 'zip']
Run Code Online (Sandbox Code Playgroud)
但看看下面的代码(Python2 和 3 都给出了相同的结果):
>>> globals()
{'__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>,
'__loader__': <class '_frozen_importlib.BuiltinImporter'>,
'__doc__': None, '__package__': None}
>>> import threading
>>> import math
>>> globals()
{'__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>,
'__loader__': <class '_frozen_importlib.BuiltinImporter'>,
'__doc__': None, '__package__': None,
'threading': <module 'threading' from C:\\ProgramFiles\\Python3.3\\lib\\threading.py'>,
'math': <module 'math' (built-in)>}
Run Code Online (Sandbox Code Playgroud)
在最后一行,模块math
被称为built-in
。为什么?math
模块和其他模块有什么区别threading
?
来自文档 ( ./Doc/library/stdtypes.rst
):
模块
...
解释器内置的模块是这样写的:
<module 'sys' (built-in)>
。如果从文件加载,它们将被写为<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>
.
相关代码位于repr()
模块对象的函数中:
static PyObject *
module_repr(PyModuleObject *m)
{
char *name;
char *filename;
name = PyModule_GetName((PyObject *)m);
if (name == NULL) {
PyErr_Clear();
name = "?";
}
filename = PyModule_GetFilename((PyObject *)m);
if (filename == NULL) {
PyErr_Clear();
return PyString_FromFormat("<module '%s' (built-in)>", name);
}
return PyString_FromFormat("<module '%s' from '%s'>", name, filename);
}
Run Code Online (Sandbox Code Playgroud)