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
答案 0 :(得分:9)
在Python中,单个前导下划线表示“这是一个实现细节,而不是API的一部分”。
这里的要点是要明确导入模块(示例中为argparse
)使用导入的,但不会将它们作为它是自己的API - 即,您(作为API的客户)不应该依赖argparse.collections
可用 - 如果您需要collections
,则必须明确地导入它。
答案 1 :(得分:7)
扩展arun的答案......
https://mail.python.org/pipermail/python-dev/2013-July/127286.html中提出的推理是,以下划线为前缀的名称被归类为"内部实施"并且没有未来保证向后兼容性。这意味着你甚至发现自己正在使用thing._otherThing
,你知道你是在摇摇欲坠的理由,未来的更新。
这意味着这些模块会明确指出您不应该依赖它们导入的内容,因为这只是一个内部实现细节。