12

別の質問に答えているときに、ソートの後続の項目に使用される状態を保存するために辞書を変更する sortkey 関数を作成することになりました。

私の答えはうまくいくように見えましたが、私の質問は次のとおりです。ソートキーがオブジェクトごとに1回だけ呼び出されることは、Pythonのドキュメントで実際に定義されていますか? これは Cpython の実装の詳細ですか? それとも、ソートキーが実際に複数回呼び出され、運が良かっただけで正しい答えを得たのでしょうか?

状態のドキュメントsorted:

key は、各リスト要素から比較キーを抽出するために使用される 1 つの引数の関数を指定します: key=str.lower。デフォルト値は None です (要素を直接比較します)

これは、要素ごとに1回だけ呼び出されることを意味するとは思いませんkey...しかし、他の場所で述べることができます。

これは、副作用のあるソートキーに影響を与えるため、明らかにお願いします。

4

1 に答える 1

14

リンクするドキュメントのセクションから:

一般に、キーおよび逆変換プロセスは、同等の cmp 関数を指定するよりもはるかに高速です。これは、リスト要素ごとに cmp が複数回呼び出されるのに対し、key と reverse は各要素に 1 回しか触れないためです。

それは「はい」のように見えます...

于 2012-11-15T04:30:47.987 に答える