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