atai0622 发表于 2021-2-17 22:04:18

20讲中关于闭包例子的一点疑问

在零基础学习python第20讲《内嵌和闭包》中,视频里关于闭包举了一个例子:
def funX(x):
        def funY(y):
                return x * y
        return funY
我试了一个下,如果把最后一句funY改为funY(y),执行会提示出错。提示y未定义。
那我是不是可以这么理解,如果使用一个内嵌函数做为返回值,就只能写函数名(funY),而不能带参数(funY(y))?

昨非 发表于 2021-2-17 22:23:52

可以这么理解吧
因为funX的返回值时一个函数
也就是意味着,a=funX(5)这一调用语句得到的返回值a也是一个函数
b=a(6)这样的写法就相当于也是一个调用语句

jackz007 发表于 2021-2-17 23:33:23

      未必,试试这个代码
def funX(x):
    def funY(y):
      return x * y
    return funY
print(funX(3)(5))

wp231957 发表于 2021-2-18 07:19:20

jackz007 发表于 2021-2-17 23:33
未必,试试这个代码

楼主说的是return不是print

逃兵 发表于 2021-2-18 08:41:23

当返回值为funY时,返回的是一个可传参函数
当返回值为funY(y)时,返回的是函数执行结果
这种情况只能通过给定默认参数解决
def funX(x):
      def funY(y):
                return x * y
      return funY(y=10)

atai0622 发表于 2021-2-18 10:12:42

感谢各位,明白了
页: [1]
查看完整版本: 20讲中关于闭包例子的一点疑问