1

重複の可能性:
なぜwhileループを避けるのですか?

Learn Python The Hard Wayに従ってPythonを学ぼうとしていますが、進行するにつれて、サイトに次のように記載されていることがわかりました。

whileループは、永久ループにのみ使用します。これは、おそらく決してループしないことを意味します。これはPythonにのみ適用され、他の言語は異なります。

今、私は基本的にJava開発者です。これwhileにより、Javaで広く使用されているのに、なぜPythonで回避する必要があるのか​​疑問に思いました。私はインターネット上で答えを見つけることができませんでした。

4

6 に答える 6

3

その声明は非常に主観的であり、私はそれに同意するかどうかはわかりません。whilePythonで使用すると、無限ループを簡単に作成できます。

  while True:
       # do stuff

おそらく、作者はこれをCと比較していて、for:で無限ループを作成するのも簡単です。

  for(;;)
      /* do stuff */

Pythonには、そのような対応する構造は実際には存在しません。

とは言っても、無限ループが(任意の言語で)役立つ場合はたくさんあります。イベントループを考えたり、無限ループを使用して特定の条件のみを発生させることでループ制御を簡略化できる場合がありますbreak

多くの場合、リストや文字列などのシーケンスを処理することになり、forループの使用は自然に適合しますが、それだけでwhileループを却下することはしません。

于 2012-07-03T10:54:29.840 に答える
3

彼は演習33で次のように述べています。

whileループの問題は次のとおりです。停止しない場合があります。

自分が何をしているのかを知っていれば、Pythonの問題ではありません。;)

于 2012-07-03T10:58:48.433 に答える
1

おかしな考えはありません。実際のwhileところ、Pythonでループする唯一の「古典的な」方法は、他の言語でのアナログであるためforですforeach(つまり、コレクションまたはイテレーターを反復処理する演算子)。

于 2012-07-03T10:56:54.160 に答える
1

Pythonのループには何も問題はwhileなく、反復可能なものを扱っていないときにその場所があります。

しかし、反復可能なものを扱っている場合(そして、この概念はPythonで非常に普及しています)、forループは常により良い構成です。

たとえば、多くの言語では、次のように記述します。

while(! file.EOF) {
    ...
}

Pythonでは、次を使用します。

for line in file:
    do_something_with(line)
于 2012-07-03T10:57:18.683 に答える
1

Pythonを学ぶTheHardWayはかなり意見が分かれているので、絶対に使用してはいけないという意味ではありませんwhile。私の推測では、イテレータはPythonで広く使用されているパターンであるため、実際の反復のほとんどはを利用できますfor..in。Javaには、JDBCを読み取るため、または標準入力から行を読み取るために、、または同様のものIteratorを使用するという古いパターンがありました。これらはすべてPythonで実行できます。(実行可能であり、間違いなく実行する必要があります。読みやすく、通常の反復可能オブジェクトを簡単に記述できるため、ライブラリが反復子APIを公開しない理由はほとんどありません。)while (it.hasNext()) { … }ResultSetfor..infor..inyield

于 2012-07-03T10:59:41.177 に答える
1

for一定の回数反復したい場合、Pythonではほとんど「デフォルト」の選択です。例えば:

for i in xrange(10):
    #do stuff
    #iterates 10 times

for an_element in a_collection:
    #do stuff
    #iterates over every element in a collection
    #though generators can be "infinite"

ただし、コードを無期限にループする場合は、whileループの方が慣用的です。

while a_boolean: 
    #do stuff
    #iterates as long as a_boolean evaluates to True

while True:
    #do stuff
    #iterates till a break is encountered

あなたはJavaのバックグラウンドを持っているのでwhile、PythonのwhileループはJavaのループとほとんど同じであり、ほとんど同じように使用されます。Pythonのforループは次のようなものです。

 for(Integer i : anArrayListOfIntegers){
     //do stuff
 }

for(int i=0;i<10;i++)フォームはPythonには存在しません。代わりに、最初の例のフォームを使用しますrange()/xrange()。とはいえ、リスト内包表記/ジェネレータ式などの場合を除いて、すべてのforループを同等のループに置き換えることができます。while

速度やメモリ使用量の観点から、これを行うことには実際の長所と短所はありません。forただし、Pythonプログラマーは、コレクションを反復処理する場合や、条件が真であるまたは真になるまでwhile反復処理する場合に使用する傾向があります。この一般的な経験則に固執すれば、おそらく間違いはありません。

于 2012-07-03T11:10:40.860 に答える