为啥这个 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 上显示正确的输出

问一下啊,以下程序出现了啥问题,为啥当输入字符串中有空格时,输出结果就有问题?

为啥这个异步程序不交错输出?

为啥python使用eval函数输出结果有很多尾数

visual studio code终端输出为啥会乱码

base64编码加密解密程序,输出有乱码,为啥?