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 回答