関数定義で二重星構文を使用して、通常の辞書を取得します。問題は、ユーザーの入力順序が失われることです。場合によっては、キーワード引数が関数に渡される順序を知りたい場合があります。
通常、関数呼び出しは多くの引数を必要としないため、パフォーマンスの問題ではないと思いますが、デフォルトで順序を維持しないのはなぜでしょうか。
私たちが使用できることを知っています:
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)2つのケースがあると思いました:
- 順序を知る必要があります。この動作は、ドキュメントを通じてユーザーに知られています。
- 注文はいらないので、注文してもしなくても構いません。
ユーザーが注文を使用していることを知っていても、次のように使用できるとは思いませんでした。
a = dict(a=1, b=42)
my_func(**a)
dict が順序付けされていないことを知らなかったからです (知っているはずなのに)
2) 少数の引数の場合、オーバーヘッドはそれほど大きくないと考えたので、引数を管理する新しい可能性を持つことの利点は、この欠点よりも優れています。
しかし、(ジョーの答えから)オーバーヘッドは無視できないようです。
[編集2]:
PEP 0468 -- Preserving the order of **kwargs in a functionはこの方向に向かっているようです。