ホームページ >バックエンド開発 >Python チュートリアル >Python 3 の「nonlocal」キーワードは、入れ子関数スコープの「global」とどう違うのですか?
Python 3 の "nonlocal" キーワード: 詳細
Python 3 では、"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" から独立しています。これは、内部関数の "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」変数を参照および変更できます。外部関数。
非ローカルとグローバル
「非ローカル」と「グローバル」の違いに注意することが重要です。どちらのキーワードでも、ネストされたスコープから変数にアクセスできますが、目的は異なります。 「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
「グローバル」キーワード バインド"x" を真のグローバルに宣言された変数に置き換え、同じ名前を持つローカル変数または囲まれた変数をオーバーライドします。
結論
Python 3 の "nonlocal" キーワードは、ネストされた関数内の変数参照を管理するための強力なツール。これにより、外側のスコープで宣言された変数に内部スコープ内でアクセスして変更できるようになり、複雑なコード構造での変数の使用をより詳細なレベルで制御できるようになります。
以上がPython 3 の「nonlocal」キーワードは、入れ子関数スコープの「global」とどう違うのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。