2008年12月3日(オランダ時間)、プログラミング言語Pythonの最新版となるPython 3.0が公開された。3.0は意図的に後方互換性が失われた初のバージョン。これまでのリリースよりも多くの変更が実施されており、すべてのPythonユーザに影響がある。しかし言語仕様が大幅に変更されたわけではない。これまで問題視されていた部分が変更されたといったもので、以前のバージョンよりも言語としての一貫性は向上している。以降で2系と3系の違いで特に注目されるポイントをかいつまんで紹介する。

Python Programming Language

最も目につく変更はprint命令がprint関数へ変更されたことだ。3.0ではprint命令は提供されていない。出力するにはprint関数を使う必要がある。表記方法が関数の文法に変わっているほか、ソフトスペース機能もなくなっている。次にPython 2.5で動作する表記と3.0の表記例を示す。

リスト1 print命令 - Python 2.5

#!/usr/bin/env python2.5

import sys

# 1. common print style
print "1 + 1 = ", 1+1

# 2. newline
print "not new line",
print

# 3. stderr 
print >>sys.stderr, "fatal error"

# 4. brancket
print (10, 20)

リスト2 print関数 - Python 3.0

#!/usr/bin/env python3.0

import sys

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

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

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

# 4. brancket
print ((10, 20))

プロンプト1 print関数の実行結果

% ./print30.py
1 + 1 =  2
not new line
fatal error
(10, 20)
% 

主な違いは次のとおり。

  1. 命令から関数に変更されたため、引数を括弧 ( ) で囲む必要がある
  2. 従来は末尾に「,」をつけることで改行を抑制していたが、関数の文法に従って「 end=" "」を指定する必要がある
  3. 標準エラー出力への指定も従来の「>>sys.stderr」から、関数の文法に従い「 file=sys.stderr」を指定する必要がある
  4. 従来の表記では括弧そのものが表示されていたケースでも、新しい表記では明示的に括弧を表記する必要がある

よく使う命令だっただけにこの変更はユーザに印象強く残るが、それほど心配する変更ではない。移行用の2to3スクリプトを使うことでprint命令を自動的にprint関数に置き換えることが可能だし、関数になったことでプログラミング言語としての一貫性が向上して従来よりもすっきりしているからだ。なれてしまえば違和感を抱くこともない。