とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【Python】Python3系とPython2系の違い

Pythonには、Python2シリーズと、Python3シリーズの二つがあります。もちろん、Python3が後に発表されたPythonで、それぞれ文法や下記化tなどが微妙に異なっています。

この記事では、Python2系とPython3系の違いをまとめてみました。

print関数

Python2では、

print "Hello, World!"

と書いてもエラーは出ずに、「Hello,World!」と出力されましたが、Python3では上の文はエラーになります。
代わりにかっこを使って

print("Hello, World!")

と書く必要があります。

尚、Python2で

print("Hello, World!")

と書いてもまったく問題はありません。

input関数とraw-input関数

input()関数は、キーボードからの入力を受け取る関数です。そして、同じ機能の関数で、raw_input()関数があります。
この2つの違いは、キーボードからの入力を文字式とみるか、Python式とみるかです。

例えば、

input()
#この関数をPython3で実行し、
#キーボードで「1+2」と打つと、
#「1+2」と文字列で表示される

このように、input()関数は入力された文字列をそのまま(文字列として)返します。

一方、

raw_input()
#この関数をPython2で実行し、
#キーボードで「1+2」と打つと、
#「3」と計算結果で表示される

このように、raw_input()関数は入力された文字列をPython式として返します


また、それぞれの関数は、下の表のように動いたり動かなかったりします。

関数名 Python2系で実行可能? Python3系で実行可能?
raw_input() ×
input() ×


もし、Python2でも3でも動くようなコードを書きたい場合は、

try:
    input = raw_input
except NameError:
    pass

と書いてください。

ライブラリ

たいていのライブラリはPython2用のものとPython3用のものの両方が用意されています。
しかし、一部のライブラリはまだPython3未対応のライブラリがあります。

Python2のみ対応しているライブラリは以下のようなものがあります。
・PyODE
・PyOpenGL
・VPython

記事作成から時間がたって、上のようなライブラリもPython3対応になっているかもしれません。
このサイトでPython3系のライブラリがあるかを確認してみてください。
Python Extension Packages for Windows - Christoph Gohlke


Python2のコードをPython3に書き換える

2to3.exe」を使うと、Python2のコードをPython3に自動書き換えすることができます。

使い方の例としては、

2to3 -w (Python3に変換する.pyファイル)

のように書きます。「-w」は「上書きせずに、新しくファイルを作る」という意味です。

なお、2to3.exeを使うには、「○○\Anaconda\Scripts」(2to3.exeが存在するディレクトリ)を環境変数のPathに追加していなければなりません。

環境変数の追加方法については、
shizenkarasuzon.hatenablog.com
を見てください。


参考文献

stackoverflow.com