[python] if 절을 종료하는 방법

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 절이 있으면 종료하면 해당 절을 건너 뛸 수 있습니다.



답변

(이 방법은 ifs, 다중 중첩 루프 및 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 문에서 선언 할 필요가 없습니다. 미리 선언 할 수 있습니다.