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 追加。

    • ThreadPoolExecutorProcessPoolExecutor を使って並行処理ができるというもの。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: SafeConfigParserConfigParser に取って代わった。

  • contextlib.contextmanager: 要研究。

  • functools

    • lru_cache という関数呼び出しをキャッシュするデコレーターが追加された。これは明らかに便利そうだ。

    • wraps デコレーターは入れ子の関数を作るときに採用したい。

  • itertools.accumulate() が追加。

  • logging

    • config の構成方法が増えた。

    • basicConfigstyle の追加。これで文字列の書式を旧式の % ではなく Python 3.X 式の format を使うことができる。

  • math

    • isfinite() 追加。数が math.nanmath.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 パッケージのアップグレード。