W1ND123 发表于 2021-10-21 21:25:11

关于一点闭包的小问题

看以下代码,情景一可以执行,可是情景二红色字体部分修改为funY(),多了一个括号为什么就不行了呢

W1ND123 发表于 2021-10-21 21:25:45

情景一:
def funX():
        x = 5
        def funY():
                nonlocal x
                x = x + 1
                return x
        return funY

成功执行
temp = funX()
temp()

W1ND123 发表于 2021-10-21 21:26:16

情景二:
def funX():
        x = 5
        def funY():
                nonlocal x
                x = x + 1
                return x
        return funY()

Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
    temp()
TypeError: 'int' object is not callable

逃兵 发表于 2021-10-21 21:29:14

你要去理解函数带括号和不带括号的区别
不带括号代表的是函数本身,更像是一种身份
带括号是函数做的事情

比如说print是打印员
print()是打印员打印东西

W1ND123 发表于 2021-10-21 21:32:37

逃兵 发表于 2021-10-21 21:29
你要去理解函数带括号和不带括号的区别
不带括号代表的是函数本身,更像是一种身份
带括号是函数做的事情 ...

爱了爱了,我后来想清楚了,你这比喻也很好!

muxuehan9201 发表于 2021-11-7 17:16:44

W1ND123 发表于 2021-11-8 10:30:33

muxuehan9201 发表于 2021-11-7 17:16
好兄弟 我还是没想清楚 求帮助

一定要注意缩进
我用情景一说明
def funX():
      x = 5
      def funY():
                nonlocal x
                x = x + 1
                return x
      return funY
temp = funX()
temp() #这里相当于return funY()

muxuehan9201 发表于 2021-11-8 19:58:40

W1ND123 发表于 2021-11-9 16:11:33

muxuehan9201 发表于 2021-11-8 19:58
看了第二天的课后作业 搞明白了 哈哈

加油~
页: [1]
查看完整版本: 关于一点闭包的小问题