/ /なぜPythonには「for-else」と「while-else」に「else」があるのですか? -python、python-3.x

なぜPythonは "for-else"と "while-else"に "else"を持っていますか? - python、python-3.x

私は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の23

for / 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 ステートメントは実行されません。