鱼C论坛

 找回密码
 立即注册
查看: 1182|回复: 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
帮你写了一下注释。不知是否有帮助。
  1. def FunX(x):       # FunX 函数,需要一个参数x
  2.     def FunY(y):   # FunY 函数,需要一个参数y
  3.         return x*y # FunY 函数的返回值,是x*y,其中x是外部函数FunX的变量
  4.     return FunY #这里返回值是FunY,是一个可执行函数,带有一个参数

  5. i=FunX(8)   #这里调用了FunX 函数,传入参数x=8,所以 i 是需要一个参数y的可执行函数,相当于给FunY起了一个名字
  6. i(5)  #这里执行可执行函数 i,传入参数为 5
复制代码
IMG20200517_193841.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 19:45:51 | 显示全部楼层
i 就是 FuncX 里的 FuncY
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-5-17 19:47:09 | 显示全部楼层
i(5)就是FunX(40)?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不要扯
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:50:21 | 显示全部楼层
这不是问嘛,不过我明白了,最近脑缺氧,谅解~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 19:50:56 | 显示全部楼层
谅解下~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的定义的函数:
  1. def FunX(x):
  2.     def FunY(y):
  3.         return x * y
  4.     return FunY
复制代码

首先:
  1. i = FunX(8)
复制代码

等价于i已经把外部的函数给装配好了:
  1. def FunX(8):
  2.     def FunY(y):
  3.         return 8 * y
  4.     return FunY
复制代码

然后你再次调用:
  1. i(5)
复制代码

结果:
  1. def FunX(8):
  2.     def FunY(5):
  3.         return 8 * 5  # 这边的值返回到FunY
  4.     return FunY  # 这边最终输出40
  5. >>> 40
复制代码


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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  5. i=FunX(8)   #这里调用了FunX 函数,传入参数x=8,所以 i 是需要一个参数y的可执行函数,相当于给FunY起了一个名字
  6. i(5)  #这里执行可执行函数 i,传入参数为 5
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 12:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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