私はPython初心者です。 「for-else」と「while-else」の「else」は完全に不要であることがわかりました。 「for」と「while」は最終的に「else」になり、代わりに通常の行を使用できるためです。
例えば:
for i in range(1, 5):
print i
else:
print "over"
そして
for i in range(1, 5):
print i
print "over"
同じだ。
では、なぜPythonには「for-else」と「while-else」に「else」があるのですか?
回答:
回答№1の23for / elseのセマンティクスについて間違っています。 else句は、たとえばbreakステートメントが検出されなかった場合など、ループが完了した場合にのみ実行されます。
典型的なfor / elseループは次のようになります。
for x in seq:
if cond(x):
break
else:
print "Didn"t find an x I liked!"
「else」は、ループ本体のすべての「if」とペアになっていると考えてください。サンプルは同じですが、ミックスに「break」ステートメントがある場合はそうではありません。
同じアイデアのより長い説明: http://nedbatchelder.com/blog/201110/forelse.html
回答№2の場合は1
ザ for ... else
ステートメントは、検索ループを実装するために使用されます。
特に、検索ループが何も見つけられない場合を処理します。
for z in xrange(10):
if z == 5:
# We found what we are looking for
print "we found 5"
break # The else statement will not execute because of the break
else:
# We failed to find what we were looking for
print "we failed to find 5"
z = None
print "z = ", z
出力:
we found 5
z = 5
その検索は次と同じです
z = None
for z in xrange(10):
if 5 == z:
# We found what we are looking for
break
if z == None:
print "we failed to find 5"
else:
print "we found 5"
print "z = ", z
覚えていること for
検索リストが空(つまり、 []
)。これが、検索後にzを使用するときにzが定義されていることを確認する必要がある理由です。次の理由により例外が発生します。 z
印刷しようとすると定義されません。
for z in []:
if 5 == z:
break
print "z = ",z
出力
print "z = ",z
NameError: name "z" is not defined
まとめると、 else
句は for
ループは自然に終了します。でブレークまたは例外が発生した場合 for
ループする else
ステートメントは実行されません。