Python模块中“list = list”的效果是什么?
我在Python标准库/usr/lib/python2.7/multiprocessing/dummy/__init__.py
看到以下代码:
list = list dict = dict
这个成语是什么意思? 我最好的猜测是:“让我们检查是否存在dict
和list
”。 这只是古代遗留的代码,没有__builtins__
中的list
和dict
?
而我又有一个疯狂的猜测: 优化从全局范围到模块范围的查询速度移动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,在这里改变它”。
在这个特殊的情况下,它是前者。 list
和dict
暴露为:
manager = multiprocessing.dummy.Manager() l = manager.list() d = manager.dict()
Manager
的定义是:
def Manager(): return sys.modules[__name__]
即Manager.list = list
。