[Python-ml-jp 2761] for-(x)range常套句について

機械伯爵 kikwai @ d5.dion.ne.jp
2004年 2月 15日 (日) 20:35:34 JST


 ども、機械です。

>たしかに、Pythonではwhileやforはブロックではありませんね。
>ものすごい勘違いをしていました。やばやば。。

 ローカルで実装するには「class文で囲む」という裏技
がありますが、さすがにマトモな思考のヒトはやらない
でしょうね(笑)

※関数を作ると、それを実行しなければなりませんが、
  class文なら即時で実行するので・・・

>>> class T:
...   r = 0
...   for x in xrange(10):
...     r += input("<<< ")
...
<<< 1
<<< 2
<<< 3
<<< 4
<<< 5
<<< 6
<<< 7
<<< 8
<<< 9
<<< 10
>>> T.r
55
>>>

※注意:絶対実践では利用しないで下さい。

>イテレーションを表現するためにあるPythonのfor文は、
>回数を数えるためにカウンタを個別に実装するよりも抽象度が高く
>コードを書き間違えるチャンスが減るというメリットがあるとおもいます.

 はい、そうですね。

 その点は私も失念していました。

 確かに、それはfor-xrange文を積極的に用いるメリッ
トとして、十分だと思われます。

 ただ初学者には、Pythonのfor文はC等にくらべて抽象
度が高いので、少し慣れた時でいいかな、と思うわけで
す。

※実際、Pythonには「回数指定のループとしてのfor文」
  というのは存在しないわけですし。

 カウンタの書き間違えについては、事実私自身が書き
忘れた(汗)ことが証明している通りですし、カウンタを
利用するなら、range/xrangeの様々なパターンのカウン
タ生成は便利ですので、結果的にはfor - (x)rangeを使
うのが正解なのでしょう。

>読むときも、カウンタを構成する計算式と比較式から意図を読み取るより、
>for文を読むほうが、一目瞭然に意図を理解できるのではないでしょうか。

 Pythonになれた人には・・・ですね。

 こういう「なれた人には」というのは、私自身はあま
り増やしたく無い気分です。

 「慣れたら、&がポインタなのは見やすいんだよ」

 「慣れたら、ループは再帰がシンプルなんだよ」

 何を言いたいかお分かりでしょうが、少なくとも彼ら
の言い分はある意味間違ってはいません。

 ただ「暗黙の了解が増えれば増えるほど、言語に接し
づらくなる」は、Python言語の設計理念だったと思いま
す。

 range関数やxrangeオブジェクトが一般の言語で見当た
らない以上(1..100とかの方がメジャーじゃないかな?
)、特にPythonにまだ親しんでない方には慎重になるべ
きだと私は思います。

 「教育用にも使えるものは教育用にしか使えない」と
いうマーフィーの法則(だっけ?)を破るためには、それ
相応の覚悟は必要だと、私は思います。

 whileループと、全数検査としてはfor文本来の使い方
(別言語ではfor-each)を覚えた上で、便利な書き方とし
てfor-xrangeを学ぶ、という順序で問題ないんじゃない
でしょうか?

   /機械伯爵/




Python-ml-jp メーリングリストの案内