鱼C论坛

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

闭包的一个问题

[复制链接]
发表于 2019-11-7 22:04:01 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
>>> def funx(x):
        def funy(y):
                return x*y
问题:
如何对x y赋值,输出最终的x*y,以及其中的原理是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-7 22:13:29 | 显示全部楼层
  1. def funx(x):
  2.     def funy(y):
  3.         return x*y
  4.     return funy
复制代码

关于闭包,小甲鱼的课程讲的很清楚。再看看视频。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 10:11:58 | 显示全部楼层
以下为我的理解,供参考
# 闭包的结构:
1.有嵌套函数,且嵌套函数用到外部函数的参数
2.外部函数的返回值为嵌套函数名
3.调用的形式为funx(x)(y)


def funx(x):
    def funy(y):
        return x*y
    return funy


f = funx(2)(3)
print(f)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-8 20:57:26 | 显示全部楼层
bozhen 发表于 2019-11-8 10:11
以下为我的理解,供参考
# 闭包的结构:
1.有嵌套函数,且嵌套函数用到外部函数的参数

程序如下:
x=3#G
def funx(x):
    x=7#E
    def funy(x):
        x=8#L
        return x
    i=funy(4)
    print(i)

funx(1)
问题:能不能借上例说明规则LEGB原则中的B是哪个么?
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 20:59:25 | 显示全部楼层
  1. def funx(x):
  2.     def funy(y):
  3.         return x * y
  4.     # funx 返回 funy 函数
  5.     return funy


  6. # 第一个括号 (3) 表示调用 funx
  7. # 第二个括号 (4) 表示调用 funx 的返回值 —— funy
  8. # 所以返回值是 3 * 4 = 12
  9. print(funx(3)(4))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-20 15:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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