2011-08-11 9 views
5

私は現在、リンダPythonのチュートリアルをつもりだと私は次のコードを参照して発電機のセクションで:Python:for-else間のforループは、how/whyが動作しますか?

def isprime(n): 
    if n == 1: 
     return False 
    for x in range(2, n): 
     if n % x == 0: 
      return False 
    else: 
     return True 

を私が最初にそれをキャッチしませんでしたが、私は私が気づいコードを行っていたとして、 elseキーワードは、同じ字下げレベルのifとの間にfor-loop全体を持っていました。私の驚いたことに、コードは実行されるだけでなく、実際には正しい動作を生成します。

forループを単純な0​​ステートメントに置き換えると、予期したインタープリタエラーが発生します。

この構文の背後にある理由は何ですか?なぜループ文では機能するのですか?print()などの理由はありません。

は参考のために、私は、コードは次のように書かれると予想しているでしょう:

def isprime(n): 
    if n == 1: 
     return False  
    for x in range(2, n): 
     if n % x == 0: 
      return False 
    return True 
+0

これはすべて正常に見えます。実際には(2番目のコードブロックで)期待通りの方法です。なぜならbreakはループ内で呼び出されないからです – wim

答えて

8

ループが正常に完了した場合for:ブロックの後else:ブロックのみ動作します。ループの外にbreakがある場合、実行されません。この場合、ループの途切れがないので、これは違いはありません。終了する前にreturnか、正常に完了させてください。

2

この動作の理由は、Python for loopに実際にelse文を続けることができるためです。他のブランチは、の場合に通常実行され、のループが終了し、が破損した後にスキップされます。

関連する問題