我在python标准库中看到了以下代码/usr/lib/python2.7/multiprocessing/dummy/__init__.py
:
list = list
dict = dict
Run Code Online (Sandbox Code Playgroud)
这个成语是什么意思?我最好的猜测是:"让我们来检查是否dict
与list
存在".它是从远古时代遗留刚刚代码而不list
及dict
的__builtins__
?
我还有一个疯狂的猜测:查找速度的优化list
从全局范围转移到模块范围.关于成语是否是明智的假设?我知道,如果我将它应用于多处理,那么这个假设是错误的.
Ano*_*sse 30
出口.然后你可以这样做:
from multiprocessing.dummy import list
Run Code Online (Sandbox Code Playgroud)
......恰好是常规的list
.
没有那条线,list
包装中就没有了multiprocessing.dummy
.
跨包有统一的API是明智的.假设所有包都应该提供一个list
类.包a
选择提供自定义实现,b
但是包想要使用list
from __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()
Run Code Online (Sandbox Code Playgroud)
有更多理由去做这些事情.例如,明确说明您正在使用的内容.
list = list
Run Code Online (Sandbox Code Playgroud)
也可以看作是一个声明"如果你想改变我正在使用的列表类型,请在此处进行更改."
在这种特殊情况下,它是前者.在list
和dict
暴露为:
manager = multiprocessing.dummy.Manager()
l = manager.list()
d = manager.dict()
Run Code Online (Sandbox Code Playgroud)
而定义Manager
是:
def Manager():
return sys.modules[__name__]
Run Code Online (Sandbox Code Playgroud)
即Manager.list = list
.