在函数定义中使用双星语法,我们得到一个正则字典。问题是它松散了用户输入顺序。有时,我们可能想知道传递给函数的关键字参数的顺序。
由于通常一个函数调用不涉及很多参数,我认为这不是性能问题,所以我想知道为什么默认不维护顺序。
我知道我们可以使用:
from collections import Ordereddict
def my_func(kwargs):
print kwargs
my_func(Ordereddict(a=1, b=42))
但它不如以下简洁:
def my_func(**kwargs):
print kwargs
my_func(a=1, b=42)
[编辑 1]:
1)我认为有两种情况:
- 我需要知道顺序,用户通过文档知道这种行为。
- 我不需要订单,所以我不在乎是否订购。
没想到即使用户知道它使用命令,他也可以使用:
a = dict(a=1, b=42)
my_func(**a)
因为他不知道没有命令 dict(即使他应该知道)
2) 我认为在少数争论的情况下开销不会很大,因此拥有管理争论的新可能性的好处将优于这个缺点。
但似乎(从乔的回答)开销是不可忽略的。
[编辑 2]:
似乎PEP 0468 -- 在函数中保留 **kwargs 的顺序正朝着这个方向发展。