What’s New In Python 3.4 ノート

What’s New In Python 3.4 を読んで、個人的に関心のある項目に注釈を付けていく。 3.4 は新規モジュールがどれも重要なので要点はぜひとも習得したい。

新規機能

  • pip が存在することを請け負う。

  • min, max にキーワード専用引数 default が追加された。引数が空集合のときの戻り値を指定するために使えるとのこと。

  • モジュールの __file__ 属性は基本的に完全パスを表す文字列。

変更機能

  • python --versionargparse--version は標準出力に文字列を出力する。

  • re の各関数で group()groups() の対象がバイトデータであるならば、戻り値もバイトデータになると期待して良い。

  • json: dump()dumps()indent を明示した場合のデフォルトの振る舞いが変更。要素を区切るカンマが行末に来る場合、空白文字が改行直前に付加されなくなった。

新規モジュール

学習すると見返りを期待できるような利用価値の高いモジュールばかりだ。

  • asyncio: 非同期 IO

    • まずは asyncio.get_event_loop()AbstractEventLoop のイベントループに関するメソッドを学ぶ。

    • 次に AbstractEventLoop の呼び出しに関するメソッドの違いを学ぶ。

    • コルーチンの概念を理解する。

    • Future を理解する。非同期実行をクラスとして表現したものだ。

    • Python Library Reference のサンプルコードをそのまま実行したら、Protocol を使うデモコードのサーバー側の出力がなぜか表示されない。明示的に文字列出力をフラッシュしないとメッセージが見えない。

      # Serve requests until Ctrl+C is pressed
      print(f'Serving on {server.sockets[0].getsockname()}', flush=True)
      
    • サブプロセス周りは Windows だと少々面倒。

  • enum: 列挙型 Enum, IntEnum および関連 API を備える。

    • Enum の意味は C/C++ の古典的なそれと同じ。少々高機能。

    • C/C++ とは異なり Enum のメンバー宣言時に値を明示的に与えなければならない。

      • auto() という関数で多少は楽になるが、やはり面倒だ。

      • あるいは Enum('Animal', 'ANT', 'BEE', 'CAT') 方式で列挙型を定義することもできる。

    • Enum のメンバーには .name.value の二つの属性しかない。

    • Enum のメンバーを print すると識別子の名前が現れる。

    • Enum は iterable だ。全メンバーを iterate できる。このときメンバーは定義した順番で現れる。

    • Enum のメンバーには順序関係がない。期待するかもしれないが .value 属性値同士の比較とはならない。この手の比較を認めるには IntEnum から列挙型を定義する。

  • pathlib: ファイルシステムパス。パスを文字列として表現する際の処理と、ファイルシステム上の構成要素としての処理の両方の能力がある。

    • 一連のパスクラス群を備えている。おもしろい継承グラフなので一度は見ることだ。もっとも抽象的なクラスは PurePath であり、どのような属性あるのかを調べるのはここを dir() するといい。どのような操作が備わっているのかを調べるならば、もう一つ高水準のクラス Pathdir() する。

    • クラス Path のコンストラクター呼び出しでオブジェクトを生成すると、実行環境に見合う型、例えば WindowsPath のオブジェクトが得られる。

    • 実行環境に見合わない型、例えば PosixPath のコンストラクターを明示的に呼び出すと、例外が送出される。

    • パスオブジェクトは値として振る舞う。文字列のようなものだからこの仕様は納得できる。

    • パスオブジェクト同士は比較可能だ。

    • 演算子 / でパスの連結ができる。これは os.path.join() の意味での連結だ。

    • os.PathLike と深く関係する。

  • statistics: 統計関数をいくつか提供する。

    • intfloat ばかりか、decimal.Decimalfractions.Fraction も統計関数の対象として扱える。

    • どの関数も引数 data はそのような値からなる列または iterator であることを必要とする。引数 data が空のときに例外 StatisticsError を送出するのも共通した振る舞いだ。

    • 中央値を評価する関数が複数ある。わかりやすいのを挙げると

      • median()

      • median_low()

      • median_high()

      という名前のものだ。データの要素数が偶数のときの振る舞いで区別するのがいい。

変更モジュール

  • argparseFileTypeencodingerrors を受け付ける。この値がそのまま open() に引き渡されるようだ。

  • contextlib redirect_stdout() が使えそう。

  • functoolspartialmethod(), singledispatch() 追加。

  • htmlunescape() 追加。

  • htmlHTMLParserstrict 引数は非推奨。

  • pdbprint はコマンドではなく Python の関数である。

  • refullmatch() が追加。