110

以下の 2 番目のケースでは、Python はローカル変数を検索しようとします。見つからない場合、最初のケースのように外側のスコープを調べられないのはなぜですか?

これは x をローカル スコープで検索し、次に外部スコープで検索します。

def f1():
    x = 5
    def f2():
         print x

これによりlocal variable 'x' referenced before assignmentエラーが発生します:

def f1():
    x = 5
    def f2():
        x+=1

関数 f2() のシグネチャを変更することは許可されていないため、x の値を渡して返すことはできません。ただし、x を変更する方法が必要です。global外側のスコープ (キーワードに似たもの) で変数名を探すように Python に明示的に指示する方法はありますか?

Python バージョン: 2.7

4

2 に答える 2

154

Python 3.xでは、これが可能です。

def f1():
        x = 5
        def f2():
                nonlocal x
                x+=1
        return f2

この投稿では、Python2.xの問題とその解決策について説明します。さらに、この主題の詳細については、PEP3104をお読みください。

于 2012-08-16T12:49:16.557 に答える
74
def f1():
    x = { 'value': 5 }
    def f2():
        x['value'] += 1

回避策は、可変オブジェクトを使用し、そのオブジェクトのメンバーを更新することです。Pythonでは、名前のバインドが難しい場合があります。

于 2012-08-16T12:50:38.267 に答える