【发布时间】:2018-04-18 17:07:17
【问题描述】:
我注意到它与 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 中,这些名称不会是导入它们的模块的本地名称吗?除非有人确实导入 *,但不鼓励这样做,所以我不确定是不是这个原因。
【问题讨论】:
-
这是一个约定,这意味着开发人员希望这些名称是私有的。告诉你你不应该在这个模块中使用它们,而应该从原始库中使用它们。
-
但这就是问题所在,谁愿意使用这个模块中的 sys itemgetter?我在其他地方看到 sys 只是按原样导入而没有 _ 前缀例如svn.python.org/projects/python/trunk/Lib/BaseHTTPServer.py
-
我认为这是编码风格的问题。但我同意这不是常见的做法,至少在 import 语句中是这样。