Python模块中“list = list”的效果是什么?

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

 list = list dict = dict 

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

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

出口。 你可以这样做:

 from multiprocessing.dummy import list 

这恰好是常规list

没有这一行, multiprocessing.dummy包中将不会有list

在包之间使用统一的API是明智的。 说所有包都应该提供一个list类。 包select提供一个自定义的实现,但是包b想使用__builtins__ list

 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 

也可以被看作是“如果你想改变我使用的列表的types,在这里改变它”。

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

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

Manager的定义是:

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

Manager.list = list