鱼C论坛

 找回密码
 立即注册
查看: 1923|回复: 3

[已解决]Python闭包问题

[复制链接]
发表于 2020-8-22 10:38:12 | 显示全部楼层 |阅读模式

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

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

x
def one(x):
    def two(y):
        return x*y
    return two
temp=one(4)
print(temp(5))


可以打印出20,但原理想不明白,哪位大佬能仔细讲讲运作过程吗

最佳答案
2020-8-22 10:45:07
本帖最后由 Twilight6 于 2020-8-22 10:48 编辑



这里的 temp=one(4) 相当于 one 参数中的 x = 4 了,传入后的参数可以看成这样:
def one(4):
    def two(y):
        return 4*y
    return two

因为 one 函数调用后返回的是 two 函数,所以代码可以看成这样了:
def two(y):
    return 4*y

此时的 temp = one(4) 也就等于这里的two 即 temp = two

然后你再次调用 temp(5) ,而 temp(5) 也就相当于将  相当于 two(5),所以此时结果就是  4*5 返回 20

你也可以去看看这个例子,应该有助于你的理解:

https://fishc.com.cn/forum.php?m ... 822&pid=4777716

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

使用道具 举报

发表于 2020-8-22 10:45:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-8-22 10:48 编辑



这里的 temp=one(4) 相当于 one 参数中的 x = 4 了,传入后的参数可以看成这样:
def one(4):
    def two(y):
        return 4*y
    return two

因为 one 函数调用后返回的是 two 函数,所以代码可以看成这样了:
def two(y):
    return 4*y

此时的 temp = one(4) 也就等于这里的two 即 temp = two

然后你再次调用 temp(5) ,而 temp(5) 也就相当于将  相当于 two(5),所以此时结果就是  4*5 返回 20

你也可以去看看这个例子,应该有助于你的理解:

https://fishc.com.cn/forum.php?m ... 822&pid=4777716

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

使用道具 举报

 楼主| 发表于 2020-8-22 10:47:20 | 显示全部楼层
Twilight6 发表于 2020-8-22 10:45
看看这个例子,应该有助于你的理解:

https://fishc.com.cn/forum.php?mod=redirect&goto=findpost& ...

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

使用道具 举报

发表于 2020-8-22 13:33:57 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 06:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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