What’s New In Python 3.4 ノート¶
What’s New In Python 3.4 を読んで、個人的に関心のある項目に注釈を付けていく。 3.4 は新規モジュールがどれも重要なので要点はぜひとも習得したい。
新規機能¶
pipが存在することを請け負う。min,maxにキーワード専用引数defaultが追加された。引数が空集合のときの戻り値を指定するために使えるとのこと。モジュールの
__file__属性は基本的に完全パスを表す文字列。
変更機能¶
python --version や
argparseの--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()するといい。どのような操作が備わっているのかを調べるならば、もう一つ高水準のクラスPathをdir()する。クラス
Pathのコンストラクター呼び出しでオブジェクトを生成すると、実行環境に見合う型、例えばWindowsPathのオブジェクトが得られる。実行環境に見合わない型、例えば
PosixPathのコンストラクターを明示的に呼び出すと、例外が送出される。パスオブジェクトは値として振る舞う。文字列のようなものだからこの仕様は納得できる。
パスオブジェクト同士は比較可能だ。
演算子
/でパスの連結ができる。これはos.path.join()の意味での連結だ。os.PathLikeと深く関係する。
statistics: 統計関数をいくつか提供する。intやfloatばかりか、decimal.Decimalやfractions.Fractionも統計関数の対象として扱える。どの関数も引数
dataはそのような値からなる列または iterator であることを必要とする。引数dataが空のときに例外StatisticsErrorを送出するのも共通した振る舞いだ。中央値を評価する関数が複数ある。わかりやすいのを挙げると
median()median_low()median_high()
という名前のものだ。データの要素数が偶数のときの振る舞いで区別するのがいい。
変更モジュール¶
argparseのFileTypeがencodingとerrorsを受け付ける。この値がそのままopen()に引き渡されるようだ。contextlibredirect_stdout()が使えそう。functoolsにpartialmethod(),singledispatch()追加。htmlにunescape()追加。htmlのHTMLParserのstrict引数は非推奨。pdbのprintはコマンドではなく Python の関数である。reにfullmatch()が追加。