Pythonの非ローカルキーワード

高洛峰
高洛峰オリジナル
2016-10-20 09:42:532381ブラウズ

この記事では、「Python クロージャと非ローカル」の使用法を紹介します。非ローカルは Python3.0 の新しいキーワードであり、python2.x はサポートを提供していないためです。この記事では、Python2.x でネストされた関数を解決することを提案しています。これは、外部を参照する唯一の方法です。変数を使用するには、global キーワードを使用してグローバル変数を定義します。もう 1 つの実現可能な解決策は、操作するキーワードの代わりにリストまたは辞書を使用することです。

例は次のとおりです: 非ローカルキーワードを使用する

1.python3.0

>>> def outer():
        x = 1
        def inner():
            nonlocal x
            x = 2
            print("inner:", x)
        inner()
        print("outer:", x)
  
 >>> outer()
 inner: 2
 outer: 2

2.python2.x は list または dict で実装されます

>>> def outer():
        x = [1]
        def inner():
            x[0] += 1 #修改x[0]保存的值
            print("inner:", x[0])
        inner()
        print("outer:", x[0])
 >>> outer()
 inner: 2
 outer: 2


:

1 http://stackoverflow.com/questions/1261875/python-nonlocal-statement

2. JavaScript のスコープチェーン定義と Python スコープの類似点と相違点

3. 公式ドキュメント:

「非ローカルステートメントにより、リストされたバインドのデフォルトの動作では、最初にローカル名前空間を検索するため、このステートメントにより、カプセル化されたコードがグローバル (モジュール) スコープ以外のローカル スコープの外側にある変数を再バインドできるようになります。 .

非ローカル ステートメントにリストされる名前は、グローバル ステートメントにリストされる名前とは異なり、外側のスコープ内の既存のバインディングを参照する必要があります (新しいバインディングを作成するスコープを明確に決定することはできません)。非ローカルなステートメントにリストされているものは、ローカル スコープ内の既存のバインディングと衝突してはなりません。"

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。