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

関連する問題