长不小的大人 发表于 2020-5-18 17:33:52

闭包调用问题



>>> def funX():
      x =
      def funY():
                x = x + 1
                return x
      return funY

>>> temp = funX()
>>> temp()
6
如果写成funX(),就显示function这个:
>>> funX()
<function funX.<locals>.funY at 0x1035d4830>
—————————————————————问题:return funY 和 return funY() 这两种写法的不同,最后调用的方式为啥不一致呢? 如果用funY()就可以直接写funX()出结果,反之,为啥要用temp去赋值funX(),再用temp()呢???

>>> def funX():
      x =
      def funY():
                x = x + 1
                return x
      return funY()

>>> funX()
6

永恒的蓝色梦想 发表于 2020-5-18 17:35:18

funcX()() 也一样

wp231957 发表于 2020-5-18 17:36:09

这个题目不知道被问了多少遍++
为什么就不能先搜一下呢

沐羽尘 发表于 2020-5-18 19:15:54

有一说一 这个问题见了不少次了return funY 是return 一个函数return funY() 是return一个结果 如果返回一个函数的话你就可以在外部调用他内部定义的内部函数了,至于为啥要用temp去赋值funX(),其实也可以funcX()()。
好像说了一堆废话{:10_250:}

Twilight6 发表于 2020-5-18 19:26:17

不带括号时,调用的是这个函数本身,是整个函数体,是一个函数对象,不需等该函数执行完成
带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果
需要传递函数本身这个对象时,不要加括号。而在执行这个函数的时候,需要加括号。
要注意的是:如果函数本身带有参数的时候,带括号就就必须带参数,同理函数本身不带参数,带括号就不能带参数
python 无处不对象,函数当然也是,可以直接像变量一样赋值的,加上括号为 函数调用表达式
注意 :python 中的官方说法,不是加不加括号的问题,而是函数执行的语法就是这样。


如果对你有帮助,记得给个最佳答案~{:10_287:}
页: [1]
查看完整版本: 闭包调用问题