Skip to main content
 首页 » 编程设计

python之为什么模块数学称为 "built-in"

2025年05月04日28telwanggs

据我所知,Python builtins 指的是那些包含在__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'] 

但是看看下面的代码(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)>} 

在最后一行,模块math 被称为built-in。为什么?模块 math 和其他模块(如 threading)有什么区别?

请您参考如下方法:

来自文档(./Doc/library/stdtypes.rst):

Modules

...

Modules built into the interpreter are written like this: <module 'sys' (built-in)>. If loaded from a file, they are written as <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); 
}