为什么python导入使用前导下划线重命名

时间:2017-11-06 13:56:16

标签: 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

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

1 个答案:

答案 0 :(得分:1)

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

来自PEP8

  

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

PS:使用import *并不是一种好习惯,但这是另一种讨论。