今回は、Python2とPython3の違いについてご紹介します。
Python2とPython3の基本的な違い
Pythonには、かつてPython2とPython3という2つの主要バージョンが並行して存在していました。
Python2は長く使用されていましたが、公式サポートはすでに終了しています。
そのため、現在はPython3の利用が推奨されています。
両者には構文や挙動の違いがあり、移行や開発時に注意が必要です。
print文の扱い
Python2ではprintは文(ステートメント)として扱われ、括弧なしで使用できます。
一方、Python3ではprintは関数になったため、必ず括弧をつけます。
1 2 3 4 5 |
# Python2 print "Hello, world!" # Python3 print("Hello, world!") |
整数の割り算
Python2では、整数同士の割り算の結果が整数となり、小数点以下は切り捨てられます。
Python3では、整数同士でも結果は浮動小数点数が返されます。
1 2 3 4 5 6 7 |
# Python2 result_py2 = 5 / 2 # 2 print result_py2 # Python3 result_py3 = 5 / 2 # 2.5 print(result_py3) |
Python3で整数の商を求めたい場合は//演算子を使用します。
文字列の型
Python2では文字列をstr型とunicode型に分けて扱います。
Python3では文字列はデフォルトでUnicode(str)扱いになり、明示的にuを付ける必要はありません。
1 2 3 4 5 6 7 8 9 |
# Python2 s1 = "Hello" # str型 (ASCII) s2 = u"こんにちは" # unicode型 print type(s1) # <type 'str'> print type(s2) # <type 'unicode'> # Python3 s = "こんにちは" # すべてstr型 (Unicode) print(type(s)) # <class 'str'> |
基本的な使い方の例
Python3での開発を前提として、代表的なコード例をいくつか紹介します。
まずはprint関数による画面出力です。
1 |
print("Hello, Python3!") |
Hello, Python3!
次に、整数の割り算の例です。
1 2 3 4 5 6 |
num1 = 7 num2 = 2 result_div = num1 / num2 # 3.5 result_floor = num1 // num2 # 3 print(result_div) print(result_floor) |
3.5
3
文字列を扱う際は、UTF-8などのエンコーディングを適切に設定すると安心です。
よくあるエラーと注意点
Python2から移行する際に、よく発生するエラーや注意点を整理します。
- print関数への移行:括弧を忘れてSyntaxErrorになる
- 整数の割り算の結果:Python2から移行したコードで意図しない浮動小数点が返る
- Unicodeの扱い:Python3ではすべての文字列がUnicodeとして扱われるため、str型とunicode型の区別が不要になった一方、外部ファイルとのやり取りでエンコーディングを明示する必要がある
- xrangeの廃止:Python2で使用していたxrange()がPython3では廃止され、range()がイテレータに近い動作をする
- 例外処理の構文変更:Python3ではexcept NameError as eのように書く
- long型が廃止:Python3ではint型に統合される
- input関数の仕様変更:Python3では常に文字列として入力される
また、Python2のコードをそのままPython3で実行すると動かないケースが多いため、2to3などの移行ツールやテストを活用することが重要です。
まとめ
Python2とPython3には構文や挙動に大きな違いがあり、移行時には注意が必要です。
新規開発ではPython3が推奨されており、ライブラリの対応状況も含めて移行を検討することが重要です。
コード変換ツールやドキュメントを活用し、後方互換性の問題を丁寧に解決することで安定した環境を整えられます。