Python 2とPython 3の違い

Pythonは、その進化の過程で大きな分岐点となったのが「Python 2」と「Python 3」です。この記事では、Python 2とPython 3の違いについて詳しく解説し、どのような点が変更され、現代のプログラミングでどちらを使うべきかを説明します。
Python 2とPython 3の概要
Python 2は2000年にリリースされ、長い間標準のPythonバージョンとして使用されてきました。しかし、Python 2の設計には時代遅れの部分があり、プログラムの効率や使いやすさを向上させるため、Python 3が2008年に登場しました。Python 3は、互換性のない変更を加えているため、Python 2で書かれたコードはそのままではPython 3で動作しないことがあります。
主な違い
以下に、Python 2とPython 3の主な違いを表形式でまとめました。
| 機能 | Python 2 | Python 3 |
|---|---|---|
| サポート | 2020年に公式サポート終了 | 現行バージョンとして推奨され、サポートされている |
| print文 | print "Hello, World!" (括弧不要) |
print("Hello, World!") (括弧が必要) |
| 整数の除算 | 3 / 2 = 1 (整数同士の除算は整数) |
3 / 2 = 1.5 (浮動小数点が返される) |
| Unicodeサポート | デフォルトでASCII | デフォルトでUnicode |
| range()関数 | リストを返す | イテレータを返す(メモリ効率が向上) |
| エラーハンドリング | except Exception, e: という形式 |
except Exception as e: という形式 |
Python 3の主要な変更点
Python 3には、Python 2から多くの重要な変更点があります。これにより、プログラムがより柔軟で効率的に動作するようになりました。
- print関数: Python 2では
printは文法の一部として扱われ、括弧は不要でしたが、Python 3では関数として扱われ、括弧が必要です。 - 整数の除算: Python 2では、整数同士の除算は切り捨てられて整数が返されますが、Python 3では浮動小数点が返されるようになりました。
- Unicode対応: Python 3では、文字列はデフォルトでUnicode形式で扱われるため、国際化(日本語などの全角文字の扱い)に対応しやすくなっています。
- range関数: Python 3では、
range()はリストではなくイテレータを返し、メモリの効率が向上しています。 - エラーハンドリング: エラーハンドリングの書き方が変わり、Python 3では
asを使って例外をキャッチします。
追加解説:日本語(マルチバイト文字)の扱いの違い
Unicode対応のメリットを最も実感できるのが、日本語の扱いです。Python 2では日本語を含む文字列の前に「u」を付ける必要があり、これを忘れると文字化けやエラーの原因になりましたが、Python 3ではそのまま記述できます。
# Python 2での日本語の扱い(u表記が必要だった)
# print u"こんにちは"
# Python 3での日本語の扱い(標準でUnicodeなのでそのまま書ける)
print("こんにちは、世界!")
Python 2からPython 3への移行
Python 2は2020年にサポートが終了しており、新しいプロジェクトではPython 3を使用することが推奨されています。Python 2からPython 3に移行するためのツールも提供されており、以下のポイントに注意しながら移行を進めることが大切です。
Python 2からPython 3への移行時に注意すべき点:
print文を関数形式に変更する- 整数の除算結果を確認し、必要に応じて
//(フロア除算)を使う - 文字列操作に関してUnicode対応を考慮する
- エラーハンドリングを
asを使った形式に変更する
追加解説:除算パターンの変化と「//」演算子
移行時によくバグの原因になるのが「整数の除算」です。Python 3でPython 2の頃のような「切り捨ての整数結果」を得たい場合は、/ ではなく // を明示的に使用する必要があります。
# Python 3で整数(切り捨て)の除算結果を得たい場合
result = 3 // 2
print(result) # 出力は 1 となり、Python 2の「3 / 2」と同じ挙動になります
Python 2とPython 3のコード例
以下に、Python 2とPython 3のコードの違いを示す例をまとめて紹介します。
■ print文・関数の違い
# Python 2: print文(括弧なし)
# print "Hello, World!"
# Python 3: print関数(括弧あり)
print("Hello, World!")
■ 整数の除算の違い
# Python 2: 整数の除算
# print 3 / 2 # 出力は1
# Python 3: 整数の除算
print(3 / 2) # 出力は1.5
■ エラーハンドリングの違い
# Python 2: エラーハンドリング
# try:
# x = 1 / 0
# except ZeroDivisionError, e:
# print "Error:", e
# Python 3: エラーハンドリング
try:
x = 1 / 0
except ZeroDivisionError as e:
print("Error:", e)
まとめ
Python 2とPython 3には多くの違いがあり、特にプログラムの書き方や動作に関して重要な変更が含まれています。Python 3は、Python 2の弱点を補い、よりモダンで効率的なプログラミングが可能となっています。今後新しく学ぶ場合や開発する場合には、Python 3を選択することが強く推奨されます。