Python 3.0リリース、仕様変更多数
12月3日、 Python 3.0 がリリースされました。Python 3.0はPython 3000とも呼ばれており、Python 2.x系から大幅な仕様変更が加えられています。
主な(そして注意すべき)変更点は「 What’s New In Python 3.0 」にまとめられていますが、「Python 2.xとは互換性が無い」と言われるように、かなりの仕様変更が行われています。主立ったものをまとめると、
- print文が関数となり、色々と仕様も変更された。もう「print “ほげほげ”,」という記法は使えない
- 「dict.keys()」や「dict.items()」、「dict.values()」といったDictionaryを扱ういくつかの関数の動作が変更され、リストの代わりにViewやIteratorを返すようになった
- 比較演算子(<、>、<=、>=)の仕様変更。明らかに不自然な比較(たとえば「1 < ”」「len <= len」など)はエラーになるようになった。また、cmp()(と__cmp__())関数は廃止になった
- long型がint型にリネームされた。そして従来のint型は廃止になった
- int同士の割り算がfloatを返すようになった(たとえば1/2の結果は0.5)。整数を返したい場合、「//」演算子を使う
- 文字列とバイナリ列が区別されるようになり、文字列はstr型を、バイナリ列はbytes型を使うようになった。str型はUnicodeで文字列が格納される。それにともない、従来「u”ほげほげ”」などと表現していたUnicode文字列は「”ほげほげ”」と表記できるようになった。さらに、「\u」「\U」は通常の文字列(そのまま\u、\Uという文字列)として扱われるようになった。
- nonlocalステートメント、「(a, b, *rest) = <シーケンス>」、「0o720」、「0b1010」など、新しい文法が導入された
- gopherlibやmd5など、いくつかの標準モジュールが廃止された(md5はhashlibにリプレスされた)
- いくつかの標準モジュールがリネームされた。たとえば「SocketServer」は「socketserver」に、「repr」は「reprlib」に、など
- 標準モジュールで関連のあるパッケージがまとめられた。たとえばhttplibやBaseHTTPServer、CGIHTTPServer、SimpleHTTPServer、Cookie、cookielibはhttpというパッケージにまとめられている
などとなりますが、そのほか文字列周りや文法には多数の仕様変更が加えられています。詳細は自身でご確認ください。
今回のアップデートでは前バージョンとの互換性を切り捨てているため、不安に思われる方も多いとは思いますが、この仕様変更により、言語仕様やライブラリの一貫性や分かりやすさが向上していると感じます。これから新規にPython開発をされるかたは、是非Python 3.0を使ってください。
(といってもレンタルサーバなどではなかなか入れ替えられないんだけどね……)。