トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

#ref(http://www.python.org/images/python-logo.gif)
[[Python Programing Langage>http://python.org/]]

<もうちょっと準備中>

-&color(green){Pythonista}; = %%Python教の狂信者%% Pythonを好んで使う人々のこと

-※こんなページタイトルですが、'''&color(green){Pythonista};とは直接関係ありません'''。単にプログラミング言語Pythonの、一風変わった特徴/哲学の特集です。

-このページの参照数 &counter; 回

#contents

*Pythonの不思議な特徴?

**インデントブロック is not アンフリーフォーマット

**どこにでもあるelse?

if文にelse節があるのはあたりまえ。elifも、case文と同様と考えればそんなに珍しくもない。でも、for文やwhile文にelse節が付けられるのはPythonぐらいでしょう。しかもこのelse節は「breakせずに正常にループが終了したら起こる」のです。理屈としてはこうです。if文の条件式が偽になった時にelse節が実行されます。forやwhileは、条件を満たさなくなった時にループを抜けます。ゆえに、「条件節を満たさなかった時にelse」は理屈には合っています。しかし、「正常にループが終わるとelse(~でなければ)」というのは、語感的に微妙な気がしないでもないですね。

*Pythonの難解な哲学?

**機械より、&color(red){人間の};可読性最重視

**Lambdaはお一人様のみ

 Pythonのラムダ文と呼ばれる文法は、lambdaキーワードによって、式を関数に変換して返すことが出来ます。ただし、defキーワードによる関数定義と異なり、ラムダ文の中には式しか書けません。Pythonでは代入は式でなく文ですから、ラムダ文によって記述できる関数は、かなり限定的なものになります。

 ラムダ文が式にしか適用できないのは、ラムダ文の中であまり複雑化しないように、という配慮らしいのですが、その結果、数学で言うところのλ式に近い雰囲気になっている(当然、本来のλ式には代入などない)ともいえます。

 ラムダ文は、名前にバインドされない無名関数を作ることによく使われますが、別に代入文を使って名前をつけることも可能です。むしろ「関数オブジェクト」を記すリテラルと考えていただいたほうがいいかもしれません。

**文は式ならず

 文と式の区別の無い言語の信奉者には、Pythonの「文と式の区別」は、前に挙げた「ブロックインデント」とともに、異端審問のように糾弾されるネタの一つです。Pythonでの式文(lambda文を含む)以外の文は、代入文、print文、exec文、for文、if文、while文、クラスや関数などの定義文、その他の例外文関連でしょうか。

 このうち、print文とexec文はPython3000では関数に変更されますし、if文は条件付評価式(Conditional Expressions)でかなりのことが書けます。for文も内包表現でそして、どんな文もdef定義で囲ってしまえば関数⇒式になってしまいます。各文を無理やり式にする必要は無いと思いますし、そのメリットもあるんだか無いのだか、結構理解しにくいです。

 では、文と式を分けることにメリットはあるのか……これは、代入(=)と比較演算(==)での単純ミスを起こさないため、ということがよく例に挙げられます。その他にも、式で表現できるということは、逆に複雑な式が書けてしまうという「悪しき欲求(ダークフォース?)」を呼びます。その抑制のためにも、文法で禁止してしまうのも一つの方法ではないのかな、と思います。

#comment