Python中的"dict-like"是什么意思?

Pau*_*aul 12 python dictionary types

偶尔人们会在Python中引用"类X"对象.例:

data_iter_maker - 一个零参数可调用,它返回一个类似于dict的数据对象的迭代器.

"dict-like"是否有一个精确的定义,如果有,它是什么?它是一个x可以像字典一样被索引的对象:x[a],哪里a是可以清洗的?在这种情况下,一个namedtuple可能不会被视为类似dict,因为你不能使用像x['a'](我最后检查你必须写x.a)的表达式索引.但另一方面,namedtuples在功能上与dicts相似,我不知道该怎么想.

讽刺的是,我很想猜测"dict-like"的意思是"一个类似的对象,足以说明我的代码会产生相同的答案,就像你提交了一个语义上相同的dict对象一样".换句话说,"运行函数并自己找出你的论点是否像dict一样!"

更一般地说,是一个类似X的对象,它实现与X相同的接口?

Dil*_*rix 7

Python使用' duck-typing ':

"如果它看起来像鸭子,像鸭子一样嘎嘎叫,它一定是鸭子."

或者,或许,"如果它看起来像一只鸭子,像鸭子一样嘎嘎叫,它就足够接近一只鸭子来对待它." 显然第一听起来更好.这与"更容易要求宽恕而不是要求许可"的蟒蛇学说密切相关.

甲类似字典的对象是一个工具,其(或模拟)的字典接口. 在相同的概念经常出现对iterables,并经常在numpy的关于"阵列状"(或"array_like")的物体.


Mik*_*ler 5

实用鸭子打字:

dict_meths = set(dir({}))

# Python3
class A:
    pass

default_meths = set(dir(A()))

diff = dict_meths - default_meths
Run Code Online (Sandbox Code Playgroud)

现在diff是:

{'__contains__',
 '__delitem__',
 '__getitem__',
 '__iter__',
 '__len__',
 '__setitem__',
 'clear',
 'copy',
 'fromkeys',
 'get',
 'items',
 'keys',
 'pop',
 'popitem',
 'setdefault',
 'update',
 'values'}
Run Code Online (Sandbox Code Playgroud)

当你在类中实现所有这些方法时,你肯定有一个类似dict的对象.如果一些不那么常见的人如update遗失了你,你仍然可能会谈论一个类似dict的对象.比较类似文件的对象.