13

例: asginment ステートメントは、新しいローカル変数を宣言します。

foo = 'global'
def func1():
    foo = 'func1'
    def func2():
        foo = 'local variable in func2'

グローバル宣言を使用すると、グローバルで foo が使用されます。

def func2():
    global foo
    foo = 'global changed in func2'  #changed the foo value in global scope

func1スコープで変数fooを変更するにはどうすればよいですか?
助けてくれてありがとう。

編集:

Brandon Craig Rhodes さん、ありがとうございます。ようやく意味がわかりました。

ネストされたスコープが 3 つ以上ある場合は、変数をリストに格納できます。

foo = ['global', 'function1', 'function2']
def func1():
    foo[1] = 'func1'
    def func2():
        foo[2] = 'func2'
        foo[1] = 'func1 modified in func2'

実際にはグローバル変数を使用するだけです。


したがって、ネストされた2つの関数がある場合、使用できます

nonlocal foo 

global foo 

ネストされた関数が 3 つ以上あり
、各関数が他の関数スコープで変数を使用している場合
、グローバル リスト変数を宣言しないのはなぜですか?
ご協力ありがとうございました!!!

4

2 に答える 2

17

Python 3 では、nonlocalキーワードを使用して、外側の非グローバル スコープ内の変数を変更する権限を取得できると思います。fooPython 2 では、外側のスコープで再割り当てすることはできません。代わりに、fooリストのような変更可能なオブジェクトに等しい値を設定してから[]、リストに保存する値を貼り付けます。

def func1():
    foo = [None]
    def func2():
        foo[0] = 'Test'
于 2011-03-21T03:01:40.410 に答える
7

Python 3.0 以降では、nonlocal キーワードを使用できます。

于 2011-03-21T03:01:52.787 に答える