if
절 을 조기에 종료하는 방법에는 어떤 것이 있습니까?
코드를 작성할 때 break
문을 if
절 안에 넣고 싶을 때가 있는데 , 그것들은 루프에만 사용할 수 있다는 것을 기억하기 위해서입니다.
다음 코드를 예로 들어 보겠습니다.
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
...
if condition_b:
# do something
# and then exit the outer if block
# more code here
이 작업을 수행하는 한 가지 방법을 생각할 수 있습니다. 종료 사례가 중첩 된 if 문 내에서 발생한다고 가정하고 나머지 코드를 큰 else 블록으로 래핑합니다. 예:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
else:
...
if condition_b:
# do something
# and then exit the outer if block
else:
# more code here
이 문제는 더 많은 종료 위치가 더 많은 중첩 / 들여 쓰기 코드를 의미한다는 것입니다.
또는 if
절을 가능한 한 작게 만들고 종료가 필요하지 않도록 코드를 작성할 수 있습니다.
if
절 을 종료하는 좋은 / 더 나은 방법을 아는 사람이 있습니까?
연관된 else-if 및 else 절이 있으면 종료하면 해당 절을 건너 뛸 수 있습니다.
답변
(이 방법은 if
s, 다중 중첩 루프 및 break
쉽게 얻을 수없는 기타 구문에 대해 작동합니다 .)
자체 함수로 코드를 래핑합니다. 대신 break
, 사용 return
.
예:
def some_function():
if condition_a:
# do something and return early
...
return
...
if condition_b:
# do something else and return early
...
return
...
return
if outer_condition:
...
some_function()
...
답변
에서 고토 수입 고토, 라벨 some_condition : ... condition_a 인 경우 : # 뭔가를 # 그런 다음 외부 if 블록을 종료합니다. goto .end ... condition_b 인 경우 : # 뭔가를 # 그런 다음 외부 if 블록을 종료합니다. goto .end # 여기에 더 많은 코드 label .end
(실제로 사용하지 마세요.)
답변
while some_condition:
...
if condition_a:
# do something
break
...
if condition_b:
# do something
break
# more code here
break
답변
예외를 제외하고 goto의 기능을 에뮬레이션 할 수 있습니다.
try:
# blah, blah ...
# raise MyFunkyException as soon as you want out
except MyFunkyException:
pass
면책 조항 : 나는 이러한 방식으로 일을 할 수 있는 가능성 을 귀하에게 알리려는 의미 일 뿐이며 , 정상적인 상황에서 합리적이라고 보증하지는 않습니다. 질문에 대한 의견에서 언급했듯이, 처음부터 비잔틴 조건문을 피하기 위해 코드를 구조화하는 것이 훨씬 바람직합니다. 🙂
답변
이럴까요?
if some_condition and condition_a:
# do something
elif some_condition and condition_b:
# do something
# and then exit the outer if block
elif some_condition and not condition_b:
# more code here
else:
#blah
if
답변
실제로 요청한 것에 대해 제 접근 방식은 if
s를 단일 루프 루프
while (True):
if (some_condition):
...
if (condition_a):
# do something
# and then exit the outer if block
break
...
if (condition_b):
# do something
# and then exit the outer if block
break
# more code here
# make sure it is looped once
break
테스트 :
conditions = [True,False]
some_condition = True
for condition_a in conditions:
for condition_b in conditions:
print("\n")
print("with condition_a", condition_a)
print("with condition_b", condition_b)
while (True):
if (some_condition):
print("checkpoint 1")
if (condition_a):
# do something
# and then exit the outer if block
print("checkpoint 2")
break
print ("checkpoint 3")
if (condition_b):
# do something
# and then exit the outer if block
print("checkpoint 4")
break
print ("checkpoint 5")
# more code here
# make sure it is looped once
break
답변
일반적으로 말하지 마십시오. 만약 당신이 “ifs”를 중첩하고 그로부터 분리한다면, 당신은 잘못하고있는 것입니다.
그러나 다음을 수행해야하는 경우 :
if condition_a:
def condition_a_fun():
do_stuff()
if we_wanna_escape:
return
condition_a_fun()
if condition_b:
def condition_b_fun():
do_more_stuff()
if we_wanna_get_out_again:
return
condition_b_fun()
함수는 if 문에서 선언 할 필요가 없습니다. 미리 선언 할 수 있습니다.