鱼C论坛

 找回密码
 立即注册
查看: 1087|回复: 4

闭包调用问题

[复制链接]
发表于 2020-5-18 17:33:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


>>> def funX():
        x = [5]
        def funY():
                x[0] = x[0] + 1
                return x[0]
        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 = [5]
        def funY():
                x[0] = x[0] + 1
                return x[0]
        return funY()

>>> funX()
6

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-18 17:35:18 | 显示全部楼层
funcX()() 也一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 17:36:09 From FishC Mobile | 显示全部楼层
这个题目不知道被问了多少遍++
为什么就不能先搜一下呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 19:15:54 | 显示全部楼层
有一说一 这个问题见了不少次了  return funY 是return 一个函数  return funY() 是return一个结果 如果返回一个函数的话你就可以在外部调用他内部定义的内部函数了,至于为啥要用temp去赋值funX(),其实也可以funcX()()。
好像说了一堆废话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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




如果对你有帮助,记得给个最佳答案~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 08:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表