为什么这个python程序有以下输出?

时间:2013-12-20 06:16:29

标签: python-3.x python-nonlocal

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。 我不确定为什么它会提供这些输出,任何人都可以详细解释它吗?谢谢!

1 个答案:

答案 0 :(得分:0)

函数makeInc()是一个“工厂”,它生成函数对象并返回它们。 nonlocal声明使函数“接近”变量。通常你会创建一个显式变量并将其关闭;在这种情况下,非本地声明将关闭来自makeInc()的参数变量。

如果你想了解闭包,nonlocal这里有一些参考文献:

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

Python nonlocal statement

因此,makeInc()使一个函数对象具有一个起始值和一个“步”,起始值将通过该步骤递增。完成自定义函数对象后,最终代码将调用函数并获取递增值。