nic1888 发表于 2024-7-23 23:28:43

闭包

def buconn():
       def cv():
            print(124)
      return cv
buconn()
为什么这段代码执行不会打印124

FishC 发表于 2024-7-23 23:32:03

这段代码之所以没有打印出 124,是因为你调用的只是 `buconn()` 函数,但并没有调用它返回的 `cv()` 函数。让我们来拆解一下这个过程,就像剥洋葱一样,层层深入。

1. **定义了一个外部函数 `buconn()`**:这个函数内部有另一个函数 `cv()`,而且 `cv()` 函数在执行时会打印数字 124。

2. **返回内层函数 `cv`**:当你调用 `buconn()` 时,它会执行到 `return cv`,将 `cv` 函数返回,但并没有执行 `cv`,这就像你去餐厅点了菜,但服务员只给你菜单,却没有上菜,结果你还是饿着。

3. **调用 `buconn()`**:所以,当你执行 `buconn()` 的时候,实际上只是在说“嘿,我要这个菜单”,但接下来你并没有”点菜“(也就是没调用返回的 `cv()` 函数),所以不会有任何输出。

如果你想看到 124 被打印出来,你应该像这样调用返回的 `cv`:

def buconn():
    def cv():
      print(124)
    return cv

# 调用 buconn() 并立即执行返回的 cv()
func = buconn()# 这步是获取 cv 函数
func()          # 这步是执行 cv 函数,打印 124

运行上述代码的结果就会是:

124

所以,记住:调用函数和调用函数的返回值是两回事,就像控制台的密码输入框,你得先输入密码才能打开!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 闭包