細かい点になるが、いくつかの文法が変更されたり廃止されている。2系でプログラミングしてきた場合には引っかかりやすいところなので、最初に変更のポイントを抑えておきたい。
- 言語自身のサイズを縮小させるとともに表記を単純化する目的でraise表記をより一貫性のあるものへ変更
- True、False、None、as、withを予約後へ変更
- メタクラスの表記方法を変更
- for構文におけるlist補完表記を廃止
- タプルパラメータアンパックを廃止
- backticksを廃止
- <>比較演算子を廃止
- exec()をキーワードから関数へ変更
最初はもたつくかもしれないが、プログラミング言語としての一貫性は向上しており、なれてしまえば従来の記述よりもしっくりくる。
そのほか
それ以外の主な変更を次にまとめておく。
- 順序比較演算子「<」「<=」「>=」「>」が従来よりも単純化され、指定されている比較演算子が「1 < ''」「0 > None」「len <= len」「None < None」のように意味がないものである場合にはFalaseを返すのではなくTypeErrorを発生するようになった
- 従来は文字列の整形に「%」指定を使っていたが、3.0では新しくstr.format()関数が導入された。「%」指定も使えるがPython 3.1には廃止される方針
- 新しい文法として関数アノテーションを導入
- 新しい文法としてキーワードオンリー引数を導入
- 新しい文法としてOuterスコープの名前にアクセスする表記を導入
- 新しい文法として拡張されたIterable Unpackingを導入
特に文字列のフォーマッティングに新しくstr.format()が導入されたことを覚えておきたい。「%」は使えるが3.1では廃止される。3.0に移行すると同時に「%」の採用は止めた方がいいだろう。