私は同意します、それは「elif not [condition(s) raise break]」のようなものです。
これが古いスレッドであることは知っていますが、現在同じ質問を調べています。この質問に対する回答を私が理解している方法で誰かが理解しているかどうかはわかりません。
else
私にとって、 in For... else
orステートメントを「読む」方法は 3 つありますがWhile... else
、これらはすべて同等です。
else
==
if the loop completes normally (without a break or error)
else
==
if the loop does not encounter a break
else
==
else not (condition raising break)
(おそらくそのような条件があるか、ループがないでしょう)
したがって、基本的に、ループ内の「else」は実際には「elif ...」であり、「...」は (1) ブレークなし、(2) NOT [ブレークを発生させる条件] と同等です。
else
重要なのは、「休憩」がなければ意味がないということだと思うので、 afor...else
には以下が含まれます。
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
したがって、for...else
ループの重要な要素は次のとおりであり、より平易な英語で次のように読むことができます。
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
他のポスターが言っているように、通常、ループが探しているものを見つけることができるとブレークが発生するため、else:
「ターゲットアイテムが見つからない場合の対処方法」になります。
例
例外処理、ブレーク、および for ループをまとめて使用することもできます。
for x in range(0,3):
print("x: {}".format(x))
if x == 2:
try:
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
except:
print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
break
else:
print("X loop complete without error")
結果
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
例
ブレークが打たれた簡単な例。
for y in range(0,3):
print("y: {}".format(y))
if y == 2: # will be executed
print("BREAK: y is {}\n----------".format(y))
break
else: # not executed because break is hit
print("y_loop completed without break----------\n")
結果
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
例
ブレークがなく、ブレークが発生する条件がなく、エラーが発生していない単純な例。
for z in range(0,3):
print("z: {}".format(z))
if z == 4: # will not be executed
print("BREAK: z is {}\n".format(y))
break
if z == 4: # will not be executed
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
print("z_loop complete without break or error\n----------\n")
結果
z: 0
z: 1
z: 2
z_loop complete without break or error
----------