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追加。動的にモジュールの要素をインポートしたい状況では、このモジュールの提供機能に頼ることになるだろう。
変更モジュール¶
collectionsCounterが追加。ドラクエのふくろ方式のコレクション型。牌譜解析に利用させてもらっている。
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)