Python入門から応用までの学習サイト


2系と3系の違い

Pythonではバージョン2系3系との間に互換性がありません。 ソースコードの書き方に違いがあるため、2系のインタプリタでは動作していたスクリプトが、3系のインタプリタでは動作しない可能性があります(逆のケースあります)。 このあたりも交えてバージョン選定を行う上での注意点も簡単にまとめておきます。

2016年現在、かなり改善しつつはありますが対応ライブラリの数は2系の方が多いです。3系で開発を始めたものの、目的の機能を実装するために利用しようとしたライブラリが2系にしか対応していない、というような状況にならないよう事前に調べておく必要があります。そういった事に陥らないように、2系を選択して開発を行うケースも多いようですが、標準ライブラリのみで開発可能なプログラムであれば、最新の3系を利用して開発を行うのが良いでしょう。


標準ライブラリの「urllib」や「xmlrpclib」等のパッケージが再構成されています。モジュール名そのものが変更されていたり、階層が移動されているケースがあるので、該当するモジュールのインポートを行う場合は注意しなければなりません。


3系からprint文が関数化されたので、2系の書き方と比較してみます。以降のソースコードは、書き方に相違はあれど出力結果は同じものとなります。


Python 2系

print 'python-izm.com'

Python 3系

print('python-izm.com')

--実行結果--

python-izm.com



Python 2系

print 'python' ,
print '-' ,
print 'izm' ,
print 'com'

Python 3系

print('python', end=' ')
print('-', end=' ')
print('izm', end=' ')
print('com')

--実行結果(「end」はデフォルトで改行コードが入ります)--

python - izm com



Python 2系

f_obj = open('test.txt', 'w')

print >> f_obj , 'python-izm.com'

Python 3系

f_obj = open('test.txt', 'w')

print('python-izm.com', file=f_obj)

--実行結果(test.txt)--

python-izm.com



文字列の型がunicodeへ統一されました。まずは2系です。文字列の型は「unicode」と「str」の2種類が存在しています。


Python 2系

# -*- coding: utf-8 -*- 

test_str_1 = 'python-izm'
test_str_2 = 'パイソンイズム'
test_str_3 = u'パイソンイズム'

print type(test_str_1)
print type(test_str_2)
print type(test_str_3)
print '-----------------------'
print test_str_1
print test_str_2
print test_str_3

--実行結果--

<type 'str'>
<type 'str'>
<type 'unicode'>
-----------------------
python-izm
(文字化け)
パイソンイズム


次の3系は「unicode」型のみです。最新のバージョンでは文字列へ「u」が付与されていてもエラーにはならなくなりました。


Python 3系

test_str_1 = 'python-izm'
test_str_2 = 'パイソンイズム'
test_str_3 = u'パイソンイズム'

print(type(test_str_1))
print(type(test_str_2))
print(type(test_str_3))
print('-----------------------')
print(test_str_1)
print(test_str_2)
print(test_str_3)

--実行結果--

<class 'str'>
<class 'str'>
<class 'str'>
-----------------------
python-izm
パイソンイズム
パイソンイズム


「type」での結果は「str」ですが内部的にはunicodeです。あえて分ける必要が無くなったので「str」へ統合されました。


Pythonでは2系のソースコードを3系へ変換するツールが用意されています。 これについては次項の2系から3系への変換ツール (2to3)で解説しています。



Python
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

2系のコードを自動で3系へ変換!



確かな力が身につく
Python「超」入門




P  R