概要
この PEP では xrange() オブジェクトから滅多に使われない振舞いであ
る x[i:j] や x*n などを剥ぎとることを提案する。
問題
xrange() 関数には一つの慣用句的な使い方がある:
for i in xrange(...): ...
しかしながら、xrange() オブジェクトにはそれ以外にも滅多に使われな
いが列的に見せるためのひと揃いの振舞いがある。これらはひどいバグ
(たとえば一つずれてしまうエラー)が数年に渡って発見されないほど滅多
に使われない。
私はこれらの使われない機能を落してしまった方がいいと主張する。そう
した方が実装やテスト・文書を簡素化でき、メンテナンスの手間もコード・
サイズも減らせるだろう。
解決案
xrange() オブジェクトを最小限まで裸にすることを提案する。残される
列としての振舞いは x[i] と len(x) と repr(x) だけにしよう。特に、
次に挙げる振舞いは削られる:
x[i:j] (スライス)
x*n, n*x (列の繰り返し)
cmp(x1, x2) (比較)
i in x (包含テスト)
x.tolist() メソッド
x.start, x.stop, x.step 属性
また、PyRange_New() C API の引数型を、4番目の引数(繰り返しカウント)
を削るよう変更することを提案する。
イテレータ型を追加して実装することで一般的な用法において高速化が図
れたが、これは採り入れても採り入れなくてもいい(デフォルトの列イテ
レータでもちゃんと動く)。
影響範囲
この PEP は xrange() ビルトイン関数と PyRange_New() C API に影響を
与える。
危険性
誰かのコードがここで削るよう提案しているコードに依存しているかもし
れず、そのようなコードは動かなくなってしまう。とはいえ、バグが長い
間見つからずに来た歴史を考えると、そう多くのコードが影響を受けると
は考えにくい。
移行
過去との互換性のために、現存する機能は Python 2.2 では存続するが、
警告を引き起こす。Python 2.2 の最終版がリリースされてから一年経っ
たら(多分 2.4 になるだろう)これらの機能は剥ぎとられる。
Copyright
This document has been placed in the public domain.
日本語訳について
日本語訳は Fe2+ (VED03370@nifty.ne.jp) が行ないました。
誤訳、誤植などありましたらお知らせ下さい。
元の文書にしたがって、自由な改変および再配布を認めます。