ホームページ >バックエンド開発 >Python チュートリアル >Python での非ローカルおよびグローバル キーワードの宣言と解析の概要
この記事Pythonでは、非ローカルとグローバルのキーワードの宣言と分析に関する関連情報が詳しく紹介されており、必要な方は以下を参照してください。
1. Python のグローバル宣言と非ローカル宣言
次のコード
a = 10 def foo(): a = 100
foo() を実行すると、結果は 10 のままです
functionpair 変数 代入、変数 常に関数のローカル名前空間にバインドされており、この動作は global ステートメントを使用して変更できます。
>>> a 10 >>> def foo(): ... global a ... a = 100 ... >>> a 10 >>> foo() >>> a 100
名前を解析するときは、まずローカルスコープを確認し、次に外部の入れ子関数で定義されたスコープを層ごとに内側から確認します。見つからない場合は、グローバルコマンド空間を検索してビルドします。 - 名前空間内。
レイヤーごとに変数を検索できますが、..python2 は最も内側のスコープ (ローカル変数) とグローバル コマンド空間 (gloabl) のみをサポートします。つまり、内部関数を外部関数で定義することはできません。ローカル変数を再割り当てします。たとえば、次のコードは python2 では機能しません。python3 では、非ローカル ステートメントを使用して変更を完了できます。
def countdown(start): n = start def decrement(): n -= 1
2. Python の非ローカルおよびグローバル キーワード分析
def countdown(start):
n = start
def decrement():
nonlocal n
n -= 1
Result
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
Result
x = 0 def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)違いを見てください何?これは関数内にネストされた関数です。非ローカルを使用する場合、変数は入れ子関数 inner() 内で有効であるだけでなく、大きな関数全体でも有効であることが宣言されます。
global
同じように、例を見てください:
# inner: 2 # outer: 2 # global: 0
x = 0 def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
以上がPython での非ローカルおよびグローバル キーワードの宣言と解析の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。