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()
に引き渡されるようだ。contextlib
redirect_stdout()
が使えそう。functools
にpartialmethod()
,singledispatch()
追加。html
にunescape()
追加。html
のHTMLParser
のstrict
引数は非推奨。pdb
のprint
はコマンドではなく Python の関数である。re
にfullmatch()
が追加。