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

dar*_*rkk 43 python

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

list = list
dict = dict
Run Code Online (Sandbox Code Playgroud)

这个成语是什么意思?我最好的猜测是:"让我们来检查是否dictlist存在".它是从远古时代遗留刚刚代码而不listdict__builtins__

我还有一个疯狂的猜测:查找速度的优化list从全局范围转移到模块范围.关于成语是否是明智的假设?我知道,如果我将它应用于多处理,那么这个假设是错误的.

Ano*_*sse 30

出口.然后你可以这样做:

from multiprocessing.dummy import list
Run Code Online (Sandbox Code Playgroud)

......恰好是常规的list.

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

跨包有统一的API是明智的.假设所有包都应该提供一个list类.包a选择提供自定义实现,b但是包想要使用listfrom __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)

也可以看作是一个声明"如果你想改变我正在使用的列表类型,请在此处进行更改."

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

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.

  • 这是为了向前兼容还是为什么有人需要从`__builtin__`之外的其他地方导入内置?或者这与`multiprocessing.dummy`模块的工作方式有关吗? (4认同)
  • 这就是*效果*,但*原因*是什么?我想不出有什么理由在那里......看不到`multiprocessing.dummy.list`或`multiprocessing.dummy.dict`的任何用法. (4认同)
  • 我是第二个Kimvais的问题.`multiprocessing`不会导出`dict`和`list`,所以我认为没有理由这样做. (2认同)
  • `multiprocessing.dummy`实现`Manager`接口,它应该有`list`和`dict`方法.尝试:`print dir(multiprocessing.dummy.Manager())`(并查看我的最新编辑) (2认同)