我可能会遗漏文档中的某些内容,但我无法找到它并且谷歌搜索并不是一个微不足道的尝试。
在查看importlib
模块时,我注意到它使用import _imp
语句导入_imp
以获取其他一些功能。显然,Python包含了可导入且(无需测试)可用的_<modname>
个模块。
使用ipython
下划线模块列表显示其中有很多:
In [2]: import _
__future__ _elementtree _sha512
_ast _functools _signal
_bisect _hashlib _sitebuiltins
_bootlocale _heapq _socket
_bz2 _imp _sqlite3
列表继续。这些模块当然是可导入的,显然是功能性的:
In [2]: import _imp
In [3]: _imp
Out[3]: <module '_imp' (built-in)>
考虑PEP 8
我会假设它们是给定模块的内部私有详细信息,这个假设是否正确?如果没有,它们用于什么?
答案 0 :(得分:1)
_
前缀通常表示模块是用C语言编写的,通常通过纯Python包装器使用,而不是直接使用。例如,socket
模块开始
import _socket
from _socket import *
意味着socket
正在使_socket
导出的项目可用。