What’s New In Python 3.2 ノート¶
What’s New In Python 3.2 を読んで、個人的に関心のある項目に注釈を付けていく。
新規機能¶
format()系の#が浮動小数点数、複素数、Decimalも対象とするようになった。In [46]: format(12345.6789, '#5.0f') Out[46]: '12346.' In [47]: format(12345.6789, '5.0f') Out[47]: '12346'
hasattr()はAttributeErrorしか握りつぶさないように変更された。Python 起動時の
-qオプションの追加。コピーライトとバージョンを表示させないフラグだ。ResourceWarningという例外が追加された。これはデフォルトで無効になっているが、有効化するとオブジェクトの各種リソースの解放が不適切なときに発見できるかもしれない。rangeの返すオブジェクトに対してlistのようにcount()やindex()を呼び出せるようになった。スライスが可能になった。
負の添字が指定可能になった。
Python 3.0 で廃止されたはずの
callable()が復活した。パスに非 ASCII 文字が含まれているときでもモジュールを
importできるようになった。
標準ライブラリー¶
新規モジュール¶
argparse追加。コマンドライン解析機能は頻繁に利用するので承知している。concurrent.futures追加。ThreadPoolExecutorやProcessPoolExecutorを使って並行処理ができるというもの。I/O bound なのか CPU bound なのかで使い分けるのだろう。並行処理につき常にデッドロックに注意。
ドキュメントの例でタイムアウトを指定したりして挙動を確かめるといい。
html.escapeがモジュールごと追加。この関数の実装を見たほうが話が早い。昔 Perl で掲示板スクリプトを書いたときに、投稿内容のテキストに含まれる HTML タグを無効化するアレだ。
変更モジュール¶
全般
メール周りの機能がメッセージをまともに処理できるようになった。
with A as B文が使えるような要素が新規に追加された。具体的に何かは知らない。
abcに@abstractclassmethod,@abstractstaticmethod追加。ただし次の Python 3.3 で非推奨の憂き目にあう。
array: 使っていないとは思うがarray.tostring()とarray.fromstring()がそれぞれarray.tobytes()とarray.frombytes()に名称変更した。collections.Counterに-=とsubtract()が追加。configparser:SafeConfigParserがConfigParserに取って代わった。contextlib.contextmanager: 要研究。functoolslru_cacheという関数呼び出しをキャッシュするデコレーターが追加された。これは明らかに便利そうだ。wrapsデコレーターは入れ子の関数を作るときに採用したい。
itertools.accumulate()が追加。loggingconfigの構成方法が増えた。basicConfigにstyleの追加。これで文字列の書式を旧式の%ではなく Python 3.X 式のformatを使うことができる。
mathisfinite()追加。数がmath.nanかmath.infであれば真である。expm1()追加。桁落ちを避けるための関数であり、ゼロ近傍の値に対して利用する。gamma()追加。複素数は指定できないようだ。
pdb.pdbrcに書ける項目が増えた。デバッグコマンドが多数追加。
random各種一様分布乱数生成関数の品質が良くなった。site一度使ってみよう。sysconfig一度使ってみよう。unittestかなり多い。python -m unittestの実行時にファイルパスを指定できるようになった。assertWarns()系追加。with A as B文で使い、警告が送出されることをassertする。assertCountEqual()追加。引数同士の要素が重複を込めて一致することをassertする。maxDiff追加。テスト失敗時の差分テキストの出力量を制御する。多数
assert系の名前変更や非推奨扱い。これは公式文書などの信頼できる情報元に当たっていちいち確認して欲しい。
xml.etree.ElementTreeパッケージのアップグレード。