0

だから私はクロージャーで遊んでいるPython 3.4.1に小さなコードを持っています

def bam(x):
    def paw():
        x+=1
        print(x)
    def bang():
        x+=1
        print(x)
    return paw, bang

もともと私は電話できるかどうかを見たかった

a=bam(56)
a[0]()
a[0]()
a[0]()
a[0]()
a[1]()

そして、最終行がJavaScriptのように56より大きい数値を出力するかどうかを確認します(私は思う)

しかし、代わりに「paw」の「x」をローカルに呼び出したので+=(そうですか?)、GETしようとするとエラーがスローされますx+=1

  File "C:/Users/Nancy/Desktop/delete2.py", line 3, in paw
    x+=1
UnboundLocalError: local variable 'x' referenced before assignment

外側のスコープで変数を変更することに対する何らかの規則はありますか?

4

1 に答える 1

2

割り当ててxいます。これは、Python がデフォルトxでローカルであることを意味します。

nonlocal代わりに、明示的に Python に伝えます。

def bam(x):
    def paw():
        nonlocal x
        x+=1
        print(x)
    def bang():
        nonlocal x
        x+=1
        print(x)
    return paw, bang
于 2014-09-12T19:09:23.807 に答える