岁月如此这般 发表于 2024-11-11 16:16:45

关于nonlocal函数

我在书上看到这样的实例                                                                                             
def funx():                                                      def funx():                                                   
        x =                                                                 x =
        def funy():                                                                def funy():
                nonlocal x                                                                nonlocal x
                x = x + 3                                                        x = x +3
                return x                                                                return x
        return funy                                                        return funy

temp = funx()                                                                temp = funx()
temp() #我回车后显示数字是7                                        temp()   #这次回车的就是8了
这跟我不是很懂,有那个大神可以告诉一下吗

FishC 发表于 2024-11-11 16:16:56

你提到的代码看起来是某个示例,但它在呈现时出现了一些格式问题,让我来为你解释一下这个例子,以及为什么结果会变化。

首先,假设函数定义为:

def funx():
    x = 4   # 起始值设为4
    def funy():
      nonlocal x   # 使用 nonlocal 关键字,表示要修改外层函数 funx 的局部变量 x
      x = x + 3    # x 的值增加 3
      return x
    return funy

这个代码意味着 `funy` 函数可以访问和修改 `funx` 函数中的 `x` 变量。

当你执行以下代码:

temp = funx()# 此时,x 初始化为 4,返回了 funy 函数
print(temp())# 调用 funy,x 从 4 变为 7,输出 7
print(temp())# 再次调用 funy,x 从 7 变为 10,输出 10

因此,`temp()` 的每次调用都会使 `x` 的值递增 3。在首次调用 `temp()` 时,`x` 的值变为 7;在第二次调用 `temp()` 时,由于 `x` 的值已经变为了 7,再次加 3 后得到 10。因此,你看到的输出会是 7 和 10,而不是 7 和 8。

如果你遇到执行结果有变化,很可能是由于某个地方改变了变量的初始化值或其他代码结构,确保你的代码和分析一致会帮助你理解结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-11-11 17:08:14

本帖最后由 jackz007 于 2024-11-11 17:09 编辑

       为什么要并列写 2 个代码,2 个代码完全一样,不知道你想说什么。但是,无论怎么样,你说的现象是完全不可能发生的!

zhangchenyvn 发表于 2024-11-11 17:44:55

打错字的问题。不太可能发生这种情况,除非内存受损
页: [1]
查看完整版本: 关于nonlocal函数