3.0はこれまでのリリースの中で唯一意図的に後方互換性が失われたバージョンだ。移行には従来よりも手間が必要になる。推奨されている移行手順は次のとおり。

  1. 従来のPythonソースコードをPython 2.6へ移植する。この段階ではほとんど手間はかからない
  2. Python 2.6で -3 オプションを指定してワーニングを出力させ、ワーニングがなくなるように編集を実施する
  3. Python 3.0の2to3ソースコードトランスレータ(2to3-3.0)を使って自動変換を実施する

移行用のブランチとして用意されている2.6系に移行してから、2.6でワーニングがでないように調整し、最後にPython 3.0で提供されているトランスレートスクリプト2to3-3.0(1)を使って変換だ。2to3-3.0(1)は指定されたPythonソースコードを3.0対応に変換するための差分を出力してくれるので、これを参考にして編集を加えればいい。変更をそのまま適用してもいいなら-wオプションを指定すればいい。2to3-3.0(1)の実行例は次のとおり。

プロンプト2 2to3-3.0(1)を使ってソースコードを変換する例

% 2to3-3.0 print25.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
--- print25.py (original)
+++ print25.py (refactored)
@@ -3,14 +3,14 @@
 import sys

 # 1. common print style
-print "1 + 1 = ", 1+1
+print("1 + 1 = ", 1+1)

 # 2. newline
-print "not new line",
-print
+print("not new line", end=' ')
+print()

 # 3. stderr
-print >>sys.stderr, "fatal error"
+print("fatal error", file=sys.stderr)

 # 4. brancket
-print (10, 20)
+print((10, 20))
RefactoringTool: Files that need to be modified:
RefactoringTool: print25.py
% 

ここで紹介した内容はWhat's New In Python 3.0で取り上げられている内容からいくつかを抜粋したものだ。もっと詳しい説明はWhat's New In Python 3.0を直接参照されたい。また本稿では取り上げていないが標準モジュールにも変更が加えられている。新しい標準モジュールについてはAPIリファレンスマニュアルを見ながら学習してほしい。

Python 3.0を学習のきっかけに

整数処理に変更が加えられたことで、Python 3.0は従来の2系と比べて若干実行性能が低下している。最適化は今後のリリースバージョンで実施されることになる。性能が若干劣化したとはいえ、Python 3.0はいくつかの点で学習をはじめ採用を検討するには優れたバージョンに仕上がっている。主な理由は次のとおり。

  • Unicodeが全面採用されたことで、2系で必要だった煩雑な表記が不要になっている
  • プログラミング言語としての一貫性が向上しており、2系よりも学習が容易になっている
  • バグの発生源となる表記が改善されており、実システムの開発にも効果的になっている
  • GoogleがGoogle App EngineやそのほかOSSプロダクトライブラリにPythonを採用しており、今後も採用シーンが増えると見込まれる

日常的に使えるスクリプト言語を探しているならPython 3.0は優れた候補だ。また新しくプログラミング言語を学習したいと考えている場合にもPython 3.0は興味深い題材といえる。