Python
python3

何故ジェネレータ関数定義は「def」を関数定義と共有して私を混乱させるのか

チラ裏級のメモ

何故defを使いまわしたか

PEP 255 にあった。

18-May-2001
...
No argument on either side is totally convincing, so I have consulted my language designer's intuition.

新しいキーワードを使うか否かで当時確信できなかったので言語設計者としての直感に頼った、といったところ

当初の背景はおそらく「イテレータの実装」が主眼にあった。もちろん今でもそうなのだが、後述する他の機能以外はないシンプルなものがジェネレータだった。

背景

ジェネレータベースのコルーチンにもなる変幻自在のジェネレータが今の姿になるまでには段階を踏んだ。PEP 342である。

https://www.python.org/dev/peps/pep-0342/

10-May-2005

g.send()g.throw() はここに起因する。

ネイティブコルーチンはPEP 492である。

https://www.python.org/dev/peps/pep-0492/

09-Apr-2015

Pythonは基本的に互換性を大事にする。また複数の方法より一つの方法に期待する

>>> import this
The Zen of Python, by Tim Peters

...
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
...

あとはあくまで「判断の問題」だと思われる。

互換性の問題から歪な設計が残っている部分は他にもないわけではない。それでも相当の及第点以上だからこそ今があるんだろう。今から設計を考えてどちらに倒れるかは不明だし、正直な所語っても大きな意義はないように感じる。