1

このコードを機能させるにはどうすればよいですか?

def f1():
    def f2():
        print g
        g = 1
        print g
    g = 0
    print g
    f2()
    print g

f1()

期待される結果はもちろん 0, 0, 1, 1 で、行ごとに出力されます

4

2 に答える 2

2

グローバルを使用したくない場合:

def f1():
    def f2():
        print g[0]
        g[0] = 1
        print g[0]
    g =[0]
    print g[0]
    f2()
    print g[0]

    f1()

これは、外側のスコープに属する変数を再割り当てできないという問題を回避するためです。再割り当てすると、基本的に、ネストされた関数内に新しい変数が作成されます。これを回避するには、値をリストでラップし、代わりにリストの要素を再割り当てします。

これは python 2 の問題です。Python 3 では、nonlocal ステートメントを使用して修正しています。

http://technotroph.wordpress.com/2012/10/01/python-closures-and-the-python-2-7-nonlocal-solution/

于 2013-11-13T13:41:15.423 に答える
0

これはどうですか :

def f1():
    def f2():
        global g
        print g
        g = 1
        print g
    global g
    g = 0
    print g
    f2()
    print g

f1()

出力:

0
0
1
1
于 2013-11-13T13:40:20.417 に答える