nikkie-ftnextの日記

イベントレポートや読書メモを発信

Pythonのone obvious way 〜The Zen of Pythonを訪ねて〜

はじめに

たった一人の、私の友達... nikkieです。

この記事では The Zen of Python を訪ねます。

目次

The Zen of Python

Tim Peters氏によるPEP 20です。

Long time Pythoneer Tim Peters succinctly channels the BDFL’s guiding principles for Python’s design into 20 aphorisms, only 19 of which have been written down. (Abstract)

氏はTimsort1アルゴリズムの作者でもあります2

The Zen of Python は以下の方法で確認できます

  • 対話モードでimport this
  • python -m this3

one obvious wayは The Zen of Python の一文に登場します。

There should be one-- and preferably only one --obvious way to do it.

『パーフェクトPython[改訂2版]』

『パーフェクトPython』には The Zen of Python を扱った節があります(1-4 Pythonの禅)

1-4-13 There should be one- and preferably only one -obvious way to do it. ── 1つのことをするのに、いろいろなやり方は好ましくない

書籍で取り上げられる例はWSGIです。
JavaのServeletAPIを見習ったのか〜!

WebサーバとPython製Webアプリケーションの間にWSGIというインターフェースを設けることで、どんなWebサーバもどんなPython製Webフレームワークも組合せて使えると理解しています。
one obvious way(訳してみると、1つの明白なやり方)ですね

なお、WSGIはcbataさんのPyCon JP発表が参考になると私は思っています

石本 敦夫さんブログ

この時(引用者注:Python 2.0リリースの時)、「これから PythonPerl のような、野放図な拡張が次々と加えられてしまうのだろうか?そうなったらそれは "Python" なのか? PythonPython らしくあるために、何か指針が必要ではないか?」という声があがった。この声に答えて公開されたのが、"The Zen of Python" だ。

従って、"The Zen of Python" は Python を 開発する人々へのガイドラインであり、Python で 開発する人へ向けたものではない。

「There should be one-- and preferably only one --obvious way to do it.」の解説より

この Zen は Perlの有名なモットー "There's More Than One Way To Do It." (やり方はひとつじゃない) に対抗して作られた Pythonのモットー "There's Only One Way To Do It"(たった一つのやり方) の書き換え版である。

PerlPythonはモットーが違うなというのは肌で感じるところです(違うけどどっちも好き)。
イベントレポート | YAPC::Japan::Online 2022、刺激的なトークがいくつも聞けました #yapcjapan - nikkie-ftnextの日記

以下は「おおっ」と思いました。

Pythonの進化により、これまでは "one obvious way" だったものが次善の手段になってしまうことがあるのだ。
(例を省略)
しかし、別のより良い方法が利用可能になった場合でも、過去との互換性を保つために古い方式を削除することはできない。

そうなんですよ、Python過去との互換性を重視してるように思うんですよ!
一例として、よいコードのスタイル(PEP 8)がアップデートされた例

The Zen of Python はジョーク

印象深かった以下の記事

Zen of Pythonが極めて有用なPythonプログラムを書く上での指針で有ることは間違いないが、本質的にはジョークで"も"ある。
所々に矛盾が仕込まれており、"Python"の名前の由来に恥じないイースターエッグである。

「There should be one-- and preferably only one --obvious way to do it.」については

この一文だけで矛盾している。
至極最もな事を言っているが、one--と--obviousで--の使い方が二通りある。

なるほど、こういう見方もあるんですね

この記事で知った実装方法も面白かったです。

落穂拾い

なお、one obvious wayには続きがあります。

Although that way may not be obvious at first unless you're Dutch.

one obvious wayは、Guidoさん以外には最初は分からないかもと言っています(ジョークですね)

別の話題。
The Zen of Python が気になるという方は、無料の試験で学べます!

感想(終わりにに代えて)

The Zen of Pythonの「There should be one-- and preferably only one --obvious way to do it.」について、いくつかの文献を見てきました。

  • The Zen of Pythonは、Python 2.0リリースにあたり、野放図に拡張するのかへの回答として、Pythonを開発する人向けに書かれた
  • Perlのモットーへの対抗として、Pythonではone obvious way
    • 一例はWSGI
    • 過去のone obvious wayへの後方互換の配慮が残る箇所もある
  • またThe Zen of Python自体はジョークでもあり、この一文中の--はone obvious wayではないという矛盾

Python 1系からPython 2.0のときに、Perlのような言語になるのか?に答えているのが The Zen of Pythonというのは、知れてよかったです。

P.S. おまけ🍜

言語機能(Python自体の開発)じゃないから、じゃあパッケージマネージャはたっくさんあってもOKですね

ほんとに?


  1. Pythonのソートは安定ですという話で言及しました