Python Programming Language

3日(オランダ時間)、Pythonの次世代バージョンにしてマイルストーンリリースとなるPython 3.0(final)が公開された。プロダクションとしての利用レベルに達したと評価されている。"Python 3000"や"Py3k"としても知られているが、この新バージョンPython 3.0は従来のPython 2系とは互換性がない。言語そのものはほとんど同じだが、ディクショナリや文字列の動作などの組み込みオブジェクトの動作が熟慮のうえで変更されており、これまで非推奨とされてきた機能は3.0からは削除されている。

Python 3.0における注目の新機能や主な変更は次のとおり。

  • Unicodeへの全面移行を実施。str型はUnicode文字列を表現し、それ以外のデータ/バイナリデータはbytes型で表現する。strとbytesの変換はstr.encode()およびbytes.decode()で実施する。Unicodeとそれ以外の8ビット文字コード文字列を混ぜて扱うとエラーとなる。バイナリデータはb"…"で表現する必要があるが、Unicodeはもはやu"…"で表記する必要はない
  • str型とbytes型は変更不可として扱われるため、バッファとして活用する場合にはbytearrayを使う。bytearrayはbytesで扱えるほとんどのAPIが使えるため、変更が頻繁に発生する場合にはbytesの代わりにbytearrayを指定すればよい
  • Unicodeベースに移行したことで、r'\u20ac'といった表記はそのまま「\u20ac」といった文字列を表現するようになった
  • ディクショナリの動作を変更し、これまでリストを返していた関数はかわりにビューやイテレータを返すようになった。またこの変更に伴い、.iterkeys()、.iteritems()、.itervalues()は削除されている
  • 比較演算子の厳密化とcmp()関数の廃止。cmp()の代わりに__lt__()、__eq__()、__hash__()などの関数を使う
  • int型とlong型はintという名称に統合された。このため整数を扱う場合はint型を使う必要がある。この新しいint型は従来のlong型と同じように振る舞う
  • print記述はprintからprint()へと変更された。3.0では括弧のついていないprint記述は使えないため、かわりにprint()記述を使う必要がある。この変更は2to3ソースコード変換ツールで自動的に変換できる
  • 標準ライブラリにおける名称をより統一のあるものへ変更

Python 2系から3.0へ移行するには、一旦Python 2.6に移行させてから3系に変更させればいい。移行用のツールが2to3が用意されているので、こうしたツールを併用して作業を実施されたい。これまでPythonを使ったプログラミングを実施してきたなら、最初の移行コストと学習コストはかかるが、Python 3.0は移行に値するバージョンに仕上がっているため移行を検討した方がよさそうだ。

特に日本のユーザによっては文字列の扱いがUnicodeベースになったことが高く評価できる。これまでPython 2系はUnicodeベースではなかったため、多言語の扱いでUnicodeを特別扱いするような表記をせざるをえなかった。3.0からUnicodeに全面対応したことでこうしたエンコーディングに起因する問題がおきにくくなっている。やっと日本語が扱いやすいバージョンが登場したといえる。3.0の登場とともにふたたびPythonに注目したい。