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
,你必须明确地导入它。
扩展arun的答案......
推理出现在 https://mail.python.org/pipermail/python-dev/2013-July/127286.html 是以下划线为前缀的名称被归类为“内部实现”,并且未来不会保证向后兼容性。这意味着你甚至发现自己正在使用 thing._otherThing
你知道你是在摇摇欲坠的理由,未来的更新。
这意味着这些模块需要明确指出您不应该依赖它们导入的内容,因为这仅仅是一个内部实现细节。