私のコードは次のとおりです:
done = False
def function():
for loop:
code
if not comply:
done = True #let's say that the code enters this if-statement
while done == False:
function()
何らかの理由で、コードがifステートメントに入ると、function()で終了した後、whileループを終了しません。
しかし、次のようにコーディングすると:
done = False
while done == False:
for loop:
code
if not comply:
done = True #let's say that the code enters this if-statement
... whileループを終了します。何が起きてる?
私のコードがif-statementに入ることを確認しました。私のコードには多くのループ(かなり大きな2D配列)があるため、デバッガーをまだ実行していません。デバッグが非常に退屈なので、あきらめました。関数内で「完了」が変更されないのはなぜですか?
問題は、関数が独自の名前空間を作成することです。つまり、関数内のdone
は2番目の例のdone
とは異なります。つかいます global done
新しいものを作成する代わりに最初のdone
を使用します。
def function():
global done
for loop:
code
if not comply:
done = True
global
の使用方法の説明は here にあります。
done=False
def function():
global done
for loop:
code
if not comply:
done = True
globalキーワードを使用して、グローバル変数done
を参照していることをインタープリターに知らせる必要があります。そうしないと、関数でのみ読み取り可能な別の変数が作成されます。
global
を使用してから、グローバル変数を変更できます。そうでない場合は、done = True
関数内では、done
という名前の新しいローカル変数を宣言します。
done = False
def function():
global done
for loop:
code
if not comply:
done = True
グローバルステートメント の詳細をご覧ください。