はじめに
本記事はProgaku Advent Calendar 2022 9日目担当です。
今まで個人開発でPython3系を触ってきましたが、
とってもレガシーなPython2系のシステムも触る機会ができてしまったので、
Python2系と3系の違いを備忘録としてまとめていきます。
(3系のコードの説明は省略しています。)
検証したpythonバージョンは以下です。
2系=2.7.18
3系=3.11.0
対象読者
python 3系の勉強して現場に入ったら、2系のシステムも触ることになった方(筆者を含む)
Unicodeの文字列の扱い
Unicode(日本語などのマルチバイト文字)は、u'文字列'と記載しないと文字化けする。
(3系)print関数→(2系)print文
python 2系ではprint関数はなく、print文として扱う。
また、複数のprintを実行して、結果を改行しない場合は、末尾にカンマを入れる。
print u'2系です。',
print u'2系です。'
2系です。2系です。
(3系)input関数→(2系)raw_input関数
処理の中で標準入力を受け取りたい時、Python2系ではraw_input関数を使う。
raw_input(u'お名前を入力してください:')
お名前を入力してください:
(3系)range関数→(2系)xrange関数も使おう
range関数は2系と3系ではリスト生成の仕方が異なる。
2系のrange関数は、引数がどれだけ大きくても、一気にリストを生成してしまい、処理が重くなる。
xrange関数を使用すると、使うリストの分だけ随時生成されるので、引数が大きい場合はxrangeを使用する。
補足:3系ではrange関数が2系のxrange関数に似た仕組みで動いてるので、range関数一択で問題ないそう。
整数同士の計算の出力
整数同士の計算だと、演算結果も整数で出力され、小数点切り捨てられる。
num = 5 / 2
print num
num = 5 / 2.0
print num
2
2.5
例外処理の書き方
例外処理の内容を変数に格納する場合、asではなくカンマ区切りで記載する。
except ValueError, err:
print err
まとめ
初学者(筆者)が気づいて理解している範囲なので、これは氷山の一角だと思います。
3系だけに慣れたいものですね...