Python3000
- Python 3000 Status Update (Long!) (http://www.artima.com/weblogs/viewpost.jsp?thread=208549)
Python3000の変更点の興味のあるところだけをリストしてみる。
- デフォルトのソースコードのencodingがユニコードになり、バイト列がb'...'で表現できる。
- print文がprint()関数になる。
- %フォーマット指定が、文字列クラスのformat()メソッドとなる。
- fomat()メソッドで、"%s"の代わりに{0},{1},...という指定ができる。{a:8}でフィールドの長さが8文字になる。
- 関数だけでなく、クラスにもデコレータが使える。
- 関数やメソッドのシグネチャにannotationが使える。def foo(a: Integer, b: Sequence) -> Stringのような指定ができる。
- カスタムメタクラスが__metaclass__の代わりに、class C(bases, metaclass=MyMeta):という指定ができる。
- 継承でベースクラスの指定が動的にできる。bases = (B1, B2)、class C(*bases): pass。
- isinstance()とissubclass()に対応する特殊メソッドが追加され、オーバーライドした任意のオブジェクトでフックをかけられるようになった。
- 抽象クラスが追加される。どのように振舞わせるかを定義できる。mix-in機能も実現可能。
- 1/2が、0でなく0.5になる。今までの1/2は、1//2となる。
- dict.keys()、dict.items()がsetsを返す。
- range()がxrange()と同等なものを返し、xrange()は廃止される。
- zip()、map()、filter()がiterablesなものを返す。
- セットリテラル{1, 2, 3}の追加。セット内包表記{x for x in y if p(x)}の追加。但し、空のセットは、set()で表す。
- reduce()がなくなり、functoolsに移動される。理由は、reduce()よりforループの方が可読性が高いため。