3.0では従来はリストを返していたよく使われるAPIのいくつかが、リストのかわりにビューやイテレータを返すように変更された。主な変更内容は次のとおり。
- dict.keys(): 返り値がリストからビューへ変更される
- dict.items(): 返り値がリストからビューへ変更される
- dict.values(): 返り値がリストからビューへ変更される
- dict.iterkeys(): 廃止
- dict.iteritems(): 廃止
- dict.itervalues(): 廃止
- map(): 返り値がリストからイテレータへ変更される
- filter(): 返り値がリストからイテレータへ変更される
- range(): 返り値がリストからオブジェクトへ変更される。従来のxrange()と類似した動作
- xrange(): 廃止
- zip(): 返り値がタプルのリストからイテレータへ変更される
Pythonにおいてリストは重要なデータ構造だ。このため多くの関数でリストが使われてきたが、3.0では順序や集合を表現する場合は、セマンティック的により適切なイテレータやビューが使われるように変更されている。結果的に余分な関数が削除され見通しがよくなっている。
整数をint型に一本化
3.0では整数に関する型や演算結果に変更が加えられているので注意しておきたい。主な変更点は次のとおり。
- 従来、整数を表現する型にはint型とlong型が存在したが、3.0ではlong型がint型に置き換わりint型のみとなっている。名称はint型になったが動きは従来のlong型と同じ
- 実質的にlong型に統一されたことで、従来はlong型を表現するために「1L」のように「L」を付加していたが、この表記は3.0では廃止されている。「L」を付加した表記はSyntaxErrorとして扱われる
- 実質的にlong型に統一されたことで整数の数値に実質的に制限がなくなったことからsys.maxint定数が廃止されている
- 従来、整数型(int, long)の割り算の結果は整数に丸め込まれていたが、3.0では整数型からfloat型へ自動変更されるようになった。計算結果を丸め込んでかつ整数にするには「//」演算子を使う。従来も「//」演算子は提供されている
- int型をバイナリデータに変換するための関数として新しくbin()が導入された
整数が実質的にlong型と同じように振る舞うint型に統一されたことで、int型とlong型を分けるための表記が不要になりプログラミング言語としての見通しがよくなっている。半面実行速度低下の原因になっているが、それは今後のリリースで改善が取り組まれる見通し。