python - 为什么模块在另一个模块中作为 _<name> 导入?

标签 python namespaces

在 Python 标准库中有几种情况,其中导入的模块名称中带有前导下划线 (_)。我想知道为什么这是必要的,因为它无论如何都在模块的名称下,from ... import * 将尊重 __all__ 变量来导入什么。

有谁知道为什么使用/需要这个?

一个示例是 argparse,它具有以下导入:

import collections as _collections
import copy as _copy
import os as _os
import re as _re
import sys as _sys
import textwrap as _textwrap

最佳答案

在 Python 中,单个前导下划线表示“这是一个实现细节,而不是 API 的一部分”。

这里的重点是明确导入模块(argparse 在您的示例中)使用导入的模块不公开它们作为它自己的 API 的一部分 - 即,您(作为 API 的客户端)不应该依赖 argparse.collections 可用 - 如果您想要 collections,您必须明确导入它。

关于python - 为什么模块在另一个模块中作为 _<name> 导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757763/

相关文章:

python - 如何从同一文件夹加载多个图像?

python - 如何从python中的测试模块导入src

python - 一次删除多个数组中所有给定值的出现

python - 二维列表转 csv - 按列

c# - 在 c++/cli 中创建命名空间?

bash - 如何在 Bash 源代码中查找变量名

python - 如何在 Ubuntu 中自动设置 future /新文件的权限?

ios - 模块 'Error' 中没有名为 'Foundation' 的类型

c++ - 命名空间问题

javascript - 如何使用部分属性名称选择 DOM 元素?