Python中的默认模块是什么(例如,当我们运行"print"时导入的模块)

5 投票
6 回答
15795 浏览
提问于 2025-04-17 03:37

在Python中,启动编译器时会自动导入哪些默认模块呢?

比如说,有print函数、加法和其他一些数学函数。
这些函数肯定是在Python的某个地方定义的。

我猜想我们可以通过查找这些信息来了解,比如说如果我们知道print函数是从哪里来的,那我们就能找到它所属的模块。

6 个回答

5

Python有三种作用域:

  • 局部作用域
  • 全局作用域
  • 内置作用域

如果你执行以下这个函数:

def foo():
    print('bar')

Python会从上到下在这三种作用域中寻找print这个函数。首先,它会检查在foo这个函数内部是否有一个叫print的局部变量。如果没有找到,它就会继续查找这个print是否是全局的脚本或模块对象(在这个例子中,foo函数就是这样的一个对象)。如果还是没有找到,它就会去__builtin__模块里查找。

__builtin__模块是定义所有像print这样的函数的地方。它还包含了一些内置的异常类。

加法和其他运算符是不同的,因为它们是作用于对象的。每个对象都有一个类型,比如整数123的类型是intint类型定义了两个整数是如何相加的,以及结果是什么。

CPython(从python.org下载的Python版本)中,__builtin__模块和所有基本类型(intstrlist等)都是用C语言编写的,并且是核心的一部分(也就是python这个可执行文件)。还有其他一些模块也是用同样的方式编写的,最著名的就是sys模块。你在Python的标准库中找不到sys.py这个文件。

6

这些函数都是模块 __builtins__ 的一部分。你可以打开一个 Python 的命令行界面,然后查看帮助信息 -

>>> help(__builtins__)
11

在Python中,“模块”有它特定的意思。像“print”和“addition”这些都不是模块。

+和其他的“数学函数”其实是运算符,而像forinif这些是关键字,它们不是函数,所以不会出现在__builtins__里面。

如果你想知道启动Python时加载了哪些模块,可以查看sys.modules.keys()

$ python -i
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.modules.keys()
['copy_reg', 'sre_compile', 'locale', '_sre', 'functools', 'encodings', 'site',
'__builtin__', 'sysconfig', 'operator', '__main__', 'types', 'encodings.encodings',
'abc', '_weakrefset', 'errno', 'encodings.codecs', 'sre_constants', 're', '_abcoll',
'ntpath', '_codecs', 'nt', '_warnings', 'genericpath', 'stat', 'zipimport',
'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.cp1252', 'sys',
'codecs', 'os.path', '_functools', '_locale', 'signal', 'traceback', 'linecache',
'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']

撰写回答