for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
일반적으로 여러 레벨의 루핑이있을 때 break
가없는 경우 (현재 루프 바로 위가 아닌 상위 루프 중 하나를 계속하려는 경우) 다음 중 하나를 수행 할 수 있습니다.
탈출하려는 루프를 함수로 리팩토링
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
단점은 이전에 범위에 있던 일부 변수를 해당 새 함수에 전달해야 할 수도 있다는 것입니다. 매개 변수로 매개 변수를 전달하고 객체에 인스턴스 변수를 만들거나 (이 함수에 맞는 새 객체를 만드는 경우) 전역 변수, 단일 톤 (ehm, ehm)을 지정할 수 있습니다.
또는 inner
중첩 함수로 정의 하고 필요한 것을 캡처하도록 할 수 있습니다 (느려질 수 있습니까?).
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
예외 사용
철학적으로, 이것은 예외적 인 경우이며, 필요한 경우 구조화 된 프로그래밍 빌딩 블록을 통해 프로그램 흐름을 깨뜨립니다.
장점은 단일 코드를 여러 부분으로 나눌 필요가 없다는 것입니다. 파이썬으로 작성하는 동안 디자인하는 계산의 종류라면 좋습니다. 이 초기 시점에 추상화를 도입하면 속도가 느려질 수 있습니다.
이 접근법의 나쁜 점은 통역사 / 컴파일러 작성자는 일반적으로 예외가 예외적이라고 가정하고 그에 따라 최적화한다는 것입니다.
class ContinueI(Exception):
pass
continue_i = ContinueI()
for i in ...:
try:
for j in ...:
for k in ...:
if something:
raise continue_i
except ContinueI:
continue
이를 위해 특별한 예외 클래스를 생성하여 실수로 다른 예외를 침묵시킬 위험이 없도록하십시오.
완전히 다른 것
나는 여전히 다른 해결책이 있다고 확신합니다.