reversed(seq)
Pythonの組み込みは、メソッドが必要であるか、シーケンス プロトコルをサポートするseq
必要があることを示します。__reversed__()
リストとタプルはどちらも明らかにシーケンス プロトコルをサポートしていますが、代わりにリストには独自の__reversed__()
メソッドが使用されています。
>>> hasattr(list, '__reversed__')
True
>>> hasattr(tuple, '__reversed__')
False
__reverse__()
次に、シーケンスプロトコルが逆に提供するよりも、リストの最適化が高速である必要があります。そこで、listobject.c に実装されているソース コードを調べましたが、C の知識が非常に限られているため、タプル ( __reversed__()
tupleobject.c ) が同様の内部反転メソッドを持たない理由を理解できません。PyTuple_MAXSAVESIZE
割り当てとメモリのいくつかの最適化 ( ) を使用して配列を Bean に変換し、リストをより使い慣れた配列にします。
__reversed__()
メソッドの実装をリスト型の最適化にする、私が見逃しているCの魔法は何ですか?タプルには標準の反復子プロトコルの方が適していますか?