What’s New In Python 3.1 ノート¶
What’s New In Python 3.1 を読んで、個人的に関心のある項目に注釈を付けていく。 3.1 は見るべき項目は多くはない。
新規機能¶
str.format()
系の書式化ルールに千区切り指定子が追加された。[[fill]align][sign][#][0][width][,][.precision][type]
このカンマが追加要素だ。
In [7]: format(1234567890) Out[7]: '1234567890' In [8]: format(1234567890, ',') Out[8]: '1,234,567,890'
str.format()
系の文字列の中括弧フィールドに自動的に番号が付与されるようになった。この機能を無意識に使っていた。
ところで str.format()
系の書式指定は詳細仕様をなかなか覚えられない。困ったときは IPython のセッションで help('FORMATTING')
と入力すれば仕様が出力される。
int.bit_length()
を使えば、その整数値を二進数で表現するために必要なビット数がわかる。正の整数 \(n\) に対して値 \(\lceil \log_2 n\rceil\) が、おそらく効率的に得られる。
その他¶
with A as B
文で複数のA as B
をカンマ区切りで並べることができるようになった。これをやると一行が長くなり過ぎるので、個人的には敬遠したい。round()
が整数を入力とすると、出力も整数となるように改められた。浮動小数点数の最短表現を決めるアルゴリズムが変更されて、文字列としての表示がましになったらしい。
新規モジュール¶
importlib
追加。動的にモジュールの要素をインポートしたい状況では、このモジュールの提供機能に頼ることになるだろう。
変更モジュール¶
collections
Counter
が追加。ドラクエのふくろ方式のコレクション型。牌譜解析に利用させてもらっている。
OrderedDict
という、要素の追加順を維持するdict
が追加された。個人的にはこの型のお世話にならないと思う。
namedtuple()
にキーワード引数rename
が追加された。これをTrue
にすればフィールド名を安全に一意的にできる。
itertools
に新規関数や引数が追加。combinations_with_replacement()
: 重複アリ置換部分列を生成する。In [30]: list(combinations_with_replacement('もくし', 3)) Out[30]: [('も', 'も', 'も'), ('も', 'も', 'く'), ('も', 'も', 'し'), ('も', 'く', 'く'), ('も', 'く', 'し'), ('も', 'し', 'し'), ('く', 'く', 'く'), ('く', 'く', 'し'), ('く', 'し', 'し'), ('し', 'し', 'し')]
compress()
: フィルターして枚挙する。count()
: キーワード引数step
が追加された。そのおかげで+=
できる型ならばなんでも枚挙できるようになった。
re
のsub()
,subs()
,split()
関数がcompile()
関数のものと同じ引数flags
をとれるようになった。logging
によその言語のライブラリーにあるそれと同様の意味を持つクラスNullHandler
が追加された。今までなかったのか。unittest
スキップ系のデコレーターが追加された。
例外テスト系が
with A as B
文に対応された。assert
系メソッドが多数追加された。
io
にseek()
関数の引数に指定する定数SEEK_SET
,SEEK_CUR
,SEEK_END
が追加された。今までどうしていたのだ。sys.version_info
がnamedtuple
になった。このオブジェクトをコンソールに出力しておくと、あとで見返すときに便利そうだ。In [42]: sys.version Out[42]: '3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]' In [43]: sys.version_info Out[43]: sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)