python – 根据dict类型,什么是映射对象?

documentation列出了创建dict实例的3种方法:

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

这里的映射到底是什么? dict(映射)工作所需的最小接口是什么?

the source code for CPython开始,此评论:

/* We accept for the argument either a concrete dictionary object,
 * or an abstract "mapping" object.  For the former, we can do
 * things quite efficiently.  For the latter, we only require that
 * PyMapping_Keys() and PyObject_GetItem() be supported.
 */

因此,“dict(映射)工作所需的最小接口”似乎是.keys()和.__ getitem __().

示例程序:

class M:
    def keys(self):
        return [1,2,3]
    def __getitem__(self, x):
        return x*2

m = M()

d = dict(m)

assert d == {1:2, 2:4, 3:6}
https://stackoverflow.com/questions/40667093/what-is-a-mapping-object-according-to-dict-type

转载注明原文:python – 根据dict类型,什么是映射对象?