Python 3 の「非ローカル」を理解する
従来の言語とは異なり、Python では、入れ子になった関数が外側のスコープで定義された変数にアクセスできます。ただし、ネストされた関数内で宣言されていない変数 (非ローカル変数) にアクセスすると、予期しない動作が発生する可能性があります。
「非ローカル」キーワード
In Python 3 では、「nonlocal」キーワードを使用すると、入れ子になった関数内から外側のスコープで宣言された変数を変更できます。 「nonlocal」を使用すると、変更している変数が非ローカルであり、外部スコープに属していることを宣言します。
「nonlocal」の仕組み
を使用せずに次のコード"nonlocal":
x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
出力:
inner: 2 outer: 1 global: 0
この例では、内部関数の変数 x が外部関数の変数 x をシャドウし、その結果、値 2 が割り当てられます。内部関数内の x。外部関数の変数 x は影響を受けません。
「nonlocal」の使用
外部関数の変数 x を内部関数から変更するには、次のように「nonlocal」を使用できます。以下は次のとおりです:
x = 0 def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
出力:
inner: 2 outer: 2 global: 0
この場合、「nonlocal」キーワードにより、内部関数が外部関数の変数 x にアクセスして変更できるようになります。その結果、外側の関数の x の値は 2 に変更されます。
「global」との比較
「nonlocal」とは異なり、「global」キーワードはグローバルスコープに属する変数を参照します。 「global」を使用すると、同じ名前の他のローカル変数の存在に関係なく、内部関数の変数がグローバル変数にバインドされます:
x = 0 def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
出力:
inner: 2 outer: 1 global: 2
したがって、外部スコープで宣言された変数を変更する場合は「nonlocal」を使用し、グローバル スコープから変数にアクセスする場合は「global」を使用する必要があります。範囲。
以上が変数の変更における Python の `nonlocal` キーワードは `global` とどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。