非ローカルおよびグローバルの詳細な分析

Y2J
リリース: 2017-05-09 15:02:00
オリジナル
2653 人が閲覧しました

この記事では、主に 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: 2
ログイン後にコピー
global は、関数クラスの変数ではなく、環境全体の変数に作用します。

概要

【関連おすすめ】

1.

Pythonの基本入門チュートリアル

3.

Python meets データ収集のビデオチュートリアル

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート