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の魔法は何ですか?タプルには標準の反復子プロトコルの方が適していますか?