为什么 python 导入重命名时带有前导下划线

Tan*_*er4 6 python import rename

我注意到它与 functools.partial 以及 python 源代码本身一起工作。例如下面来自collections.py

from operator import itemgetter as _itemgetter, eq as _eq
from keyword import iskeyword as _iskeyword
import sys as _sys
import heapq as _heapq
Run Code Online (Sandbox Code Playgroud)

这样做的理由是什么?如果这是 C++,我知道它可能会导致命名空间冲突,但是在 python 中,这些名称不是导入它们的模块的本地名称吗?除非有人确实导入 *,但不鼓励这样做,所以我不确定这就是原因。

Dev*_*ark 4

这表明该函数、变量或类是私有的。它不仅是人类约定(所以你应该知道不要使用它),而且 python 还强制在某些条件下不会导入它。

来自PEP8

_single_leading_underscore:弱“内部使用”指示符。例如 from M import * 不会导入名称以下划线开头的对象。

PS:使用import *不是一个好的做法,但那是另一个讨论。