2017-09-26 3 views
0

는의가 보자 :많은 함수, 루프 등을 깨고 처음부터 다시 시작하는 방법은 무엇입니까?

def foo(): 
    if x: 
     do_something() 
     if y: 
      break_out_of_everything() 
     else: 
      do_something_2() 
    else: 
     do_something_else() 

가 어떻게 전체 foo는() 함수를 종료하고 다시 시작하는 함수 break_out_of_everything()해야합니까?

+2

함수 여야합니까? 그런 다음 예외 만 예외가됩니다. 그렇지 않으면 그냥'return'. – RemcoGerlich

+0

또는 while 루프 ..'while breaker == False' ....'if y : breaker = True; 휴식. 하지만 그냥 반환 할 수있는 양식으로 리팩터링하는 것이 더 확실한 것은 – Uvar

+0

데코레이터를 사용하는 것이 좋습니다. –

답변

1

이것은 완벽한 솔루션입니다.

python-goto

는 간단한 예를 시도하고 쉽게 사용할 수 있습니다.

0

함수가 결과적으로 값을 반환 할 것이고 결국 변경 될 특정 특성에 따라 달라 지므로 foo()이 올바르게 작동하게 할 수 있습니까? 그렇다면, 당신은 재귀 함수를 호출 할 수 있습니다,하지만 당신은 코드가 결국 다른 return 문을 칠 것이라는 점을 확인해야하고 그것은 단지 당신이 할 수

import time 

def foo(): 
    if x: 
     do_something() 
     if y: 
      time.sleep(5) 
      return foo() 
     else: 
      do_something_2() 
    else: 
     do_something_else() 
     return x 
0

또 다시 foo()를 계속 전화 실 거예요 것을 :

def foo(): 
    if x: 
     do_something() 
     if y: 
      foo() 
     else: 
      do_something_2() 
    else: 
     do_something_else() 
+0

return 문에 도달하지 않기 때문에 작동하지 않을 것이므로 – AK47

+0

@ AK47 당신의 권리;) 필요하지 않습니다. – RaminNietzsche

+0

결국 다른 return 문이 나오는지 확인하십시오. 그렇지 않으면 무한 재귀 루프가됩니다. – AK47