나는 '엘리 프가 아닌 [조건을 깨는 조건]'과 같다는 데 동의합니다.
나는 이것이 오래된 스레드라는 것을 알고 있지만, 지금 같은 질문을 조사하고 있으며, 내가이 질문에 대한 답을 내가 이해하는 방식으로 포착했는지 확실하지 않습니다.
나에게있어서 else
in For... else
이나 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
'브레이크'가 없으면 의미가 없다는 것이므로 다음을 for...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
----------