文档说值视图不被视为类似集合 https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects,但有时它们是:
>>> d = {1: 1}
>>> d.values() | d.keys()
{1}
>>> d.values() & d.keys()
{1}
>>> d.values() - d.keys()
set()
为什么实现 set-returning set 语义却失败了actual set?
>>> d.values() - {1}
TypeError: unsupported operand type(s) for -: 'dict_values' and 'set'
这其实不是dict_values
处理操作。这keys_view
将通过支持反映的方法从右侧强制操作:
>>> set().__rsub__({}.values())
NotImplemented
>>> {}.keys().__rsub__({}.values())
set()
出于类似的原因,设置操作有时会与其他字典视图一起工作或不工作:
# works, because type(d.items()) implements __rsub__
>>> d.values() - d.items()
{1}
# fails, because type(d.values()) does not implement __rsub__
>>> d.values() - d.values()
TypeError: unsupported operand type(s) for -: 'dict_values' and 'dict_values'
因此,尽管这种行为似乎违反了鸭子类型,但文档仍然是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)