ホームページ >バックエンド開発 >Python チュートリアル >Python 関数で変数を再割り当てすると UnboundLocalError が発生するのはなぜですか?
関数内で変数を再代入するときの UnboundLocalError について
変数が関数の外で定義されている場合、その変数はグローバル変数とみなされ、関数内でアクセス可能。ただし、変数が関数内で再定義された場合、その変数はローカル変数となり、グローバル変数よりも優先されます。これにより、同じ名前でグローバル変数にアクセスしようとすると、「UnboundLocalError」エラーが発生する可能性があります。
提供された例では:
a, b, c = (1, 2, 3) def test(): print(a) print(b) print(c) c += 1
このコードが実行されると、変数は、b、c はグローバルに定義されます。テスト関数内で、print(a)、print(b)、および print(c) 行は、グローバル変数の値を正常に出力します。
ただし、行 c = 1 のコメントが解除されている場合、行は次のことを試みます。テスト関数内で c の値を再割り当てします。これにより、新しいローカル変数 c が作成され、それに値 4 が割り当てられます。したがって、行 print(c) が実行されると、グローバル変数 c ではなくローカル変数 c が参照されます。ローカル変数 c は参照される前に値が割り当てられていないため、「UnboundLocalError」エラーが発生します。
このエラーを回避するには、関数内の変数名の前に global キーワードを使用して明示的に行うことができます。グローバル変数にアクセスすることを示します。たとえば、以下のコードは正しく動作します:
a, b, c = (1, 2, 3) def test(): global c print(a) print(b) print(c) c += 1
この場合、テスト関数が実行されると、グローバル c ステートメントにより、関数内の変数 c がグローバル変数 c を参照し、グローバル変数 c を参照しないことが保証されます。ローカル変数。したがって、print(c) 行はグローバル変数 c.
の正しい値を出力します。以上がPython 関数で変数を再割り当てすると UnboundLocalError が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。