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。 我不确定为什么它会提供这些输出,任何人都可以详细解释它吗?谢谢!
答案 0 :(得分:0)
函数makeInc()
是一个“工厂”,它生成函数对象并返回它们。 nonlocal
声明使函数“接近”变量。通常你会创建一个显式变量并将其关闭;在这种情况下,非本地声明将关闭来自makeInc()
的参数变量。
如果你想了解闭包,nonlocal
这里有一些参考文献:
http://www.mondoinfo.com/blog/C182263547/E20060918200706/index.html
因此,makeInc()
使一个函数对象具有一个起始值和一个“步”,起始值将通过该步骤递增。完成自定义函数对象后,最终代码将调用函数并获取递增值。