Python での非ローカルおよびグローバル キーワードの宣言と解析の概要

高洛峰
リリース: 2017-03-13 09:29:11
オリジナル
1657 人が閲覧しました

この記事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 の非ローカルおよびグローバル キーワード分析


nonlocal


まず第一に、非ローカル キーワードがクロージャで定義されていることを明確にする必要があります。次のコードを見てください:

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)
ログイン後にコピー

globalは、関数クラスの変数ではなく、環境全体の変数に作用します。

以上がPython での非ローカルおよびグローバル キーワードの宣言と解析の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!