32
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PEP572とGuido van RossumのBDFL引退

Posted at

普段はPythonの最新の開発動向は追いかけていない私ですが、たまたまTwitterで
Pythonの生みの親Guido van Rossumの下記のツイートを目にしました。

何気なくこのPEP 572を斜め読んで、結構大胆な拡張だなぁ、などとその時は思っていました。

今日たまたま、Rubyの生みの親まつもとゆきひろ氏がこんなツイート

をしているのを見つけて、YoutuberっていうのはGuidoのこのツイート

のことを指していると分かったのですが、GuidoがBDFLを引退っていうところにびっくりして調べてみました。

BDFLは、Benevolent Dictator For Lifeの略で優しい終身の独裁者と訳されていますが、この言葉自体Guidoが使い始めたらしいです。

Pythonの言語仕様の拡張に関する提案は、PEPn (nは番号) という文書に記述されていますが、これらの提案を受け入れるか棄却するか、最終的に決定するというのが、今までのGDFLとしてのGuidoの役割でした。BDFLの役割や、PEPのドラフトやレビューといった言語仕様変更の手続き自体、PEP1に書かれています。

生みの親がそれを辞めるというのですから大事ですが、その理由が、PEP572の議論だったそうです。詳しくはこの記事に書いてありますが、要はPEP572での論争があまりにも激し過ぎて疲れ果てたし、自分の判断を嫌う人たちを見たくない、ということが理由ということです。

PEP572

そんな未曽有の大論争を巻き起こしたPEP572は何についてかというと、代入式の追加です。
今までPythonでは名前への代入は文しかなく、代入式はありませんでした。PEP 572により、
NAME := expr という代入式が新たに導入されることになります。正確にはnamed expressionという
式の値が右辺のexprの評価値で、副作用として同じ値に左辺の名前が付きます。新たなスコープは導入されません。

PEP572に挙げられている例は、

# Handle a matched regex
if (match := pattern.search(data)) is not None:
    # Do something with match

# A loop that can't be trivially rewritten using 2-arg iter()
while chunk := file.read(8192):
   process(chunk)

# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]

といったもので、確かに、cみたいに代入式が使えれば、同じものを二度評価したりしなくてもよかったり、もっと文が短くなるのに…と思うことはありました。

PEP572は、Python 3.8に反映される予定です。

32
7
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?