鱼C论坛

 找回密码
 立即注册
查看: 969|回复: 8

[已解决]老版本中20课的问题求助

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

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

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

x
课本中的闭包的例题,i =funX(8),但是i(5)就算知道i为function,也无法理解i(5)就能代表y=5,这要具体怎么理解呢,我晕菜了,求大神指点一二,非常感谢!
最佳答案
2020-5-18 08:59:54
帮你写了一下注释。不知是否有帮助。
def FunX(x):       # FunX 函数,需要一个参数x
    def FunY(y):   # FunY 函数,需要一个参数y
        return x*y # FunY 函数的返回值,是x*y,其中x是外部函数FunX的变量
    return FunY #这里返回值是FunY,是一个可执行函数,带有一个参数

i=FunX(8)   #这里调用了FunX 函数,传入参数x=8,所以 i 是需要一个参数y的可执行函数,相当于给FunY起了一个名字
i(5)  #这里执行可执行函数 i,传入参数为 5
IMG20200517_193841.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 19:45:51 | 显示全部楼层
i 就是 FuncX 里的 FuncY
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:45:52 | 显示全部楼层
i就是funX的返回值,而funX的返回值是一个函数(funY)
而funY的返回值会用到上面funX的参数,也就是x
而你在定义i的时候,把funX的参数x设置成了8
所以,现在再调用funY,也就是x(8)乘上传入的参数(5),
也就是40.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:47:09 | 显示全部楼层
i(5)就是FunX(40)?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:49:12 | 显示全部楼层
pyrhon萌新# 发表于 2020-5-17 19:47
i(5)就是FunX(40)?

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

使用道具 举报

发表于 2020-5-17 19:50:21 | 显示全部楼层
这不是问嘛,不过我明白了,最近脑缺氧,谅解~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:50:56 | 显示全部楼层
谅解下~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:53:24 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-17 19:55 编辑

你的定义的函数:
def FunX(x):
    def FunY(y):
        return x * y
    return FunY
首先:
i = FunX(8)
等价于i已经把外部的函数给装配好了:
def FunX(8):
    def FunY(y):
        return 8 * y
    return FunY
然后你再次调用:
i(5)
结果:
def FunX(8):
    def FunY(5):
        return 8 * 5  # 这边的值返回到FunY
    return FunY  # 这边最终输出40
>>> 40

如果对你有帮助,就设置个最佳吧~

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

使用道具 举报

发表于 2020-5-18 08:59:54 | 显示全部楼层    本楼为最佳答案   
帮你写了一下注释。不知是否有帮助。
def FunX(x):       # FunX 函数,需要一个参数x
    def FunY(y):   # FunY 函数,需要一个参数y
        return x*y # FunY 函数的返回值,是x*y,其中x是外部函数FunX的变量
    return FunY #这里返回值是FunY,是一个可执行函数,带有一个参数

i=FunX(8)   #这里调用了FunX 函数,传入参数x=8,所以 i 是需要一个参数y的可执行函数,相当于给FunY起了一个名字
i(5)  #这里执行可执行函数 i,传入参数为 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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