根据PEP 468:
从版本3.6开始,Python将保留传递给函数的关键字参数的顺序。为了实现这一点,收集的kwargs现在将是一个有序映射。请注意,这并不意味着
OrderedDict
。
既然如此,为什么这个有序映射无法与Python的规范有序映射类型collections.OrderedDict
进行相等比较呢?
>>> from collections import OrderedDict
>>> data = OrderedDict(zip('xy', 'xy'))
>>> def foo(**kwargs):
... return kwargs == data
...
>>> foo(x='x', y='y') # expected result: True
True
>>> foo(y='y', x='x') # expected result: False
True
虽然现在已经保留了迭代顺序,但是kwargs
在比较方面表现得就像一个普通的字典一样。自 Python 3.5 起,Python 有一个由 C 实现的有序字典,因此它本可以直接使用(或者,如果性能仍然是一个问题,可以使用一个更快的实现,使用一个 3.6 紧凑字典的薄子类)。
为什么函数接收到的有序映射在相等性比较中不考虑顺序?
OrderedDict
”。 - smac89OrderedDict
进行比较,也许,这并不是“有序映射”所指的意思。 - smac89