为啥这个 python 程序有以下输出?
Posted
技术标签:
【中文标题】为啥这个 python 程序有以下输出?【英文标题】:why this python program have the following output?为什么这个 python 程序有以下输出? 【发布时间】:2014-01-08 22:51:14 【问题描述】: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。 我不确定为什么它会给出这些输出,有人可以详细解释一下吗?谢谢!
【问题讨论】:
抛出语法错误。 @Hariprasad 它对我来说工作正常。我用的是 Python 3.3.1,你用的是哪个版本的? 【参考方案1】:函数makeInc()
是一个制造函数对象并返回它们的“工厂”。 nonlocal
声明使函数“关闭”一个变量。通常你会创建一个显式变量并关闭它;在这种情况下,非本地声明将关闭来自 makeInc()
的参数变量。
如果您想了解闭包和nonlocal
,这里有一些参考资料:
http://www.mondoinfo.com/blog/C182263547/E20060918200706/index.html
Python nonlocal statement
因此,makeInc()
创建了一个函数对象,该对象具有一个起始值和一个起始值将递增的“步长”。制作自定义函数对象后,最终代码会调用函数并获取递增值。
【讨论】:
以上是关于为啥这个 python 程序有以下输出?的主要内容,如果未能解决你的问题,请参考以下文章
为啥以下 Hello World 程序在 PowerShell 上没有显示任何输出?相同的程序在 CMD 上显示正确的输出