5

次のコード:

x = 0
print "Initialization: ", x
def f1():
    x = 1
    print "In f1 before f2:", x
    def f2():
        global x
        x = 2
        print "In f2:          ", x
    f2()
    print "In f1 after f2: ", x
f1()
print "Final:          ", x

プリント:

Initialization:  0
In f1 before f2: 1
In f2:           2
In f1 after f2:  1
Final:           2

の変数f2にアクセスする方法はありますか?f1

4

3 に答える 3

6

Python 3では、f2でxを非ローカルとして定義できます。

Python 2では、f2のf1のxに直接割り当てることはできません。ただし、その値を読み取ってそのメンバーにアクセスすることはできます。したがって、これは回避策になる可能性があります。

def f1():
    x = [1]
    def f2():
        x[0] = 2
    f2()
    print x[0]
f1()
于 2010-02-18T17:25:11.330 に答える
6

あなたは変数にアクセスすることができます、問題は割り当てです。xPython 2では、新しい値に再バインドする方法はありません。詳細については、 PEP 227(ネストされたスコープ)を参照してください。

nonlocalPython 3では、の代わりにnewキーワードを使用できますglobalPEP3104を参照してください。

于 2010-02-18T17:25:24.760 に答える
0

globalステートメントを削除します。

>>> x
0
>>> def f1():
    x = 1
    print(x)
    def f2():
        print(x)
    f2()
    print(x)


>>> f1()
1
1
1

から変数を変更する場合は、各関数でステートメントを使用する必要があります。xf1global

于 2010-02-18T17:24:34.683 に答える