python - Python模块中 "list=list"的作用是什么?

标签 python

我在python标准库/usr/lib/python2.7/multiprocessing/dummy/__init__.py中看到了以下代码:

list = list
dict = dict

这个成语是什么意思?我最好的猜测是:“让我们检查 dictlist 是否存在”。 __builtins__ 中没有 listdict 的只是古代遗留代码吗?

我还有另一个疯狂的猜测:优化list 从全局范围移动到模块范围的查找速度。关于这个成语的假设是否合理?我明白了,如果我将它应用于多处理,这个假设是错误的。

最佳答案

导出。然后你可以这样做:

from multiprocessing.dummy import list

...恰好是常规的list .

没有那条线,就没有 list包装内multiprocessing.dummy .

跨包有一个统一的 API 是明智的。假设所有软件包都应该提供 list类(class)。包a选择提供自定义实现,包b但是想使用list来自 __builtins__ .

powerful/__init__.py:
from powerfulinternals import PowerfulList as list
from simple.simpleinternals import Something as whoo

simple/__init__.py:
list = list
from simpleinternals import Something as whoo

application.py:
try:
  import powerful as api
else:
  import simple as api

mylist = api.list()
woot = api.whoo()

还有更多的理由去做这样的事情。例如,明确说明您正在使用什么。

list = list

也可以看作是“如果你想改变我正在使用的列表的类型,在这里改变它”的声明。

在这种特殊情况下,它是前者。 listdict暴露为:

manager = multiprocessing.dummy.Manager()
l = manager.list()
d = manager.dict()

以及Manager的定义是:

def Manager():
  return sys.modules[__name__]

Manager.list = list .

关于python - Python模块中 "list=list"的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8850921/

相关文章:

python - LinearDiscriminantAnalysis - .transform(X) 的单列输出

python - 由 Timestamp 对象组成的 Pandas 系列的 min() 和 max() 方法的意外结果

python - 让标准输出显示包含输入的调用脚本

python - 如何将 url 值传递给 Scrapy 爬取中的所有后续项目?

python - 将 2D 数组从 python 传递给 swagger

python - 是否可以从 wxPython 中的 GridSizeEvent 获取新的列大小?

python - 与 pandas 系列切片的混淆

python - sklearn : TFIDF Transformer : How to get tf-idf values of given words in document

python - 如何在替代包名称下安装 Python wheel? (在我的具体情况下,PyCryptodome 在 "Cryptodome"包名下)

python - 如何测试一个字符串是否有大写字母