「at some later time」はいつの日か (Python から書式化 % 演算子が消える日)

さすがにちょっとくらい遊ぼうと思って、今 3.5.1 をインストールしてみたりもして。

何かを supersede するようなものが出来たであるとか、問題点があるからと言う理由で「いずれ非推奨になります」とか「いつか消えます」とかなんてのは、Python の歴史上何度も繰り返されてきたこと。その中の「絶賛宙ぶらりん中」なのがコレ。

PEP 3101 進化版文字列フォーマッティングが従来の % 演算子を完全に置き換え、ここで言うように:

However, the % operator is still supported; it will be deprecated in Python 3.1 and removed from the language at some later time.

と予定された。3.0 リリース時 (2008年かな?) には。ケドみなさまご承知のとーり、% 演算子は消える気配がない。そして今 3.5.1 で試してみたけど、無論警告やらも出ることもなく。もっといやぁ、PEP 461なんつぅ、「% 廃止運動」に反する拡張が今更入っていたりもする。

この手の機能の置換や廃止はマイナーバージョン一つで解決してきたものもこれまで数多いけれど、とんでもなく気長に進められてきたものも多くて、その代表的なのが「int/long 問題」と「文字列とは Unicode のことである問題」の2つで、これは要するにメジャーバージョン一つ (10年くらい) かけたわけであって、この % 演算子問題もそうなるのかもしれない。

と…言いたいところだけど、これまでしばらくの期間ずっと What’s New を熟読して歴史を眺めてきた感覚からいって、この件、どーーも「立ち消え」臭がしないでもないのな。あんまし「使うな」を前面に押し出さないのね、公式ドキュメントが。強いて言えば 2.7 では入っていない文言:

Note: The formatting operations described here exhibit a variety of quirks that lead to a number of common errors (such as failing to display tuples and dictionaries correctly). Using the newer str.format() interface helps avoid these errors, and also provides a generally more powerful, flexible and extensible approach to formatting text.

3.x では入ったことくらい。まぁこれでも十分なのかもしれないけれど、言い方は決して強いとは言えないわけね。

個人的には「無理じゃね?」と思うのね。3.x 内でこれを撤廃するなんて。どんだけ使われてるか、てことだ。だからほんとにこれが削除されるのはきっと 4.x、2008 年からの十数年後と考えればおそらく東京オリンピック以降。本当にプログラムから非推奨扱いになる(ドキュメントだけでなく)のはその一つ前の「最後の 3.x」で、なのだろう。「it will be deprecated in Python 3.1」とはよく言ったもんだ。(python-dev ML を検索するほどの体力はないが、おそらくそれをすれば、これへの反感的なスレッドもあったんじゃないのかなと想像する。)

ワタシは今でも癖で結構普通に % 使っちゃうし、メジャーな OSS だってかなり使ってるのは見てきてる。str.format の方が、あるいは Template がパワフルで柔軟だてのは重々わかった上で、無論「いつか消すぞ」言われてるものを「気にせず使いなはれ」と言うほどの度胸もないけれどもね、ケドさ、「本当にパワフルなテンプレートエンジンが欲しければ」の程度問題というのがあってな。「その str.format だって不十分であろ」ってなったらもう Jinja2Mako の出番でしょ、だって。標準の str.format 「パワフルだ、すげー」を喰らい尽くそうなんて、あんま思わないわけだな。(これが % でもいんじゃね? と思うことに繋がったりする。)

で、結論は?

うーん。「絶対に % 演算子を使うべからず」と言うほどのもんではないけど、「少しずつ使わないようにしていけば?」くらいには思う。この 5 年以内にある日突然 % 演算子が使えなくなることはない、とだけははっきり予測出来るからさ、じっくりやってきゃいいんじゃない? 程度のもんだよね。