我在python标准库/usr/lib/python2.7/multiprocessing/dummy/__init__.py
中看到了以下代码:
list = list
dict = dict
这个成语是什么意思?我最好的猜测是:“让我们检查dict
和list
是否存在”。
是list
中没有dict
和__builtins__
的古代遗留代码吗?
我还有一个疯狂的猜测:优化查询速度从全局范围移动list
到模块范围。关于成语是否是明智的假设?我知道,如果我将它应用于多处理,那么这个假设是错误的。
答案 0 :(得分:30)
出口。然后你可以这样做:
from multiprocessing.dummy import list
......恰好是常规list
。
如果没有该行,则list
包中将不会有multiprocessing.dummy
。
跨包有统一的API是明智的。假设所有包都应该提供list
类。包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
也可以看作是一个声明“如果你想改变我正在使用的列表类型,请在此处进行更改。”
在这种特殊情况下,它是前者。 list
和dict
公开为:
manager = multiprocessing.dummy.Manager()
l = manager.list()
d = manager.dict()
Manager
的定义是:
def Manager():
return sys.modules[__name__]
即。 Manager.list = list
。