“的影响是什么?”;list=list";在Python模块中?
我在python标准库“的影响是什么?”;list=list";在Python模块中?,python,Python,我在python标准库/usr/lib/python2.7/multiprocessing/dummy/\uuuu init\uuuu.py中看到了以下代码: list = list dict = dict 这个成语是什么意思?我最好的猜测是:“让我们检查一下dict和list是否存在”。 它只是古代遗留的代码,没有内置的中的列表和目录 我还有另一个疯狂的猜测:优化查找速度,将列表从全局范围移动到模块范围。关于这个成语,这是合理的假设吗?我明白了,如果我将其应用于多处理,那么这个假设是错误的。
/usr/lib/python2.7/multiprocessing/dummy/\uuuu init\uuuu.py
中看到了以下代码:
list = list
dict = dict
这个成语是什么意思?我最好的猜测是:“让我们检查一下dict
和list
是否存在”。
它只是古代遗留的代码,没有内置的中的列表
和目录
我还有另一个疯狂的猜测:优化查找速度,将列表
从全局范围移动到模块范围。关于这个成语,这是合理的假设吗?我明白了,如果我将其应用于多处理,那么这个假设是错误的。导出。然后,您可以执行以下操作:
from multiprocessing.dummy import list
。。。这恰好是常规的列表
如果没有该行,包多处理.dummy
中就不会有列表
跨包使用统一的API是明智的。假设所有包都应该提供一个列表
类。包a
选择提供自定义实现,包b
但是希望使用内置的列表
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
也可以看作是一句话:“如果您想更改我使用的列表类型,请在此处更改。”
在这种特殊情况下,它是前者。列表
和目录
公开如下:
manager = multiprocessing.dummy.Manager()
l = manager.list()
d = manager.dict()
Manager
的定义是:
def Manager():
return sys.modules[__name__]
i、 e.Manager.list=list
(+1)来回答这个有趣的问题。鉴于Python2.6中引入了多处理
,因此代码似乎不太可能太旧。感谢您的评论!我认为,multiprocessing
已经足够老了,可以在Python2.4中使用它,因为在文档[1]中没有“自2.6以来”的注释:([1]我认为它在这里并不重要,但有一个“新版本2.6”关于整个模块的注意事项:这是为了向前兼容,还是为什么任何人都需要从\uuuuuuuuuuuuuuuuuuuuuuu
以外的其他地方导入一个内置代码?还是这与多处理.dummy
模块的工作方式有关?第二个Kimvais问题。多处理
不导出dict
,并且list
,所以我看不出有什么好的理由这么做。这就是效果,但原因是什么?我想不出它存在的任何原因…看不到多处理.dummy.list
或多处理.dummy.dict
多处理.dummy
实现了管理器
接口,该接口是已设置为具有列表
和dict
方法。请尝试:print dir(multiprocessing.dummy.Manager())
(并查看我的最新编辑)作为旁注:这只在模块级起作用;在函数中,您得到赋值前引用的UnboundLocalError:local变量“list”;为了避免这一问题,您必须import uuu builtin uu;;list=uu builtin.list
(Python 3.x中的builtins
)