0
def makeInc (x, step):
    def next():
        nonlocal x, step
        x = x + step
        return x
    return next

x = makeInc (0, 1)
y = makeInc (0, 10)

x1=x()
x2=x()
y1=y()
y2=y()

print( x1, x2, y1, y2)

出力は 1 2 10 20 です。なぜこれらの出力が得られるのかわかりません。詳しく説明できる人はいますか? ありがとう!

4

1 に答える 1

0

関数makeInc()は、関数オブジェクトを作成して返す「ファクトリ」です。宣言はnonlocal、関数を変数に「閉じる」ようにします。通常、明示的な変数を作成し、それを閉じます。この場合、非ローカル宣言は からの引数変数を閉じていますmakeInc()

クロージャーについて学びたい場合、nonlocalここにいくつかの参考文献があります:

http://www.mondoinfo.com/blog/C182263547/E20060918200706/index.html

Python 非ローカル ステートメント

したがって、makeInc()開始値と、開始値がインクリメントされる「ステップ」を持つ関数オブジェクトを作成します。カスタム関数オブジェクトを作成すると、最終的なコードで関数が呼び出され、増分値が取得されます。

于 2013-12-20T07:17:53.903 に答える