鱼C论坛

 找回密码
 立即注册
查看: 2450|回复: 2

[已解决]闭包的参数传递问题

[复制链接]
发表于 2022-10-24 16:48:45 | 显示全部楼层 |阅读模式
5鱼币
>>> def power(exp):
...     def exp_of(base):
...         return base ** exp
...     return exp_of
...
>>> square = power(2)
>>> cube = power(3)
>>> square(5)
25
>>> cube(5)
125

小甲鱼的这个例子里
square = power(2)相当于是把 2传递给了exp
那为什么 square(5)直接是把参数传递给了 base呢?
这里不太理解。
最佳答案
2022-10-24 16:48:46
本帖最后由 jackz007 于 2022-10-24 21:07 编辑
def power(exp):
    def exp_of(base):
        return base ** exp
    return exp_of   # 返回内嵌函数 exp_of() 的调用地址

square = power(2)   # quare 得到了以 2 为 exp 参数,exp_of() 函数的调用地址 
cube = power(3)     # cube  得到了以 3 为 exp 参数,exp_of() 函数的调用地址
square(5)           # 以 5 为 base 参数,2 为 exp 参数,调用函数 power(exp) 的内嵌函数 exp_of(base)
cube(5)             # 以 5 为 base 参数,3 为 exp 参数,调用函数 power(exp) 的内嵌函数 exp_of(base)
     注意到 power() 的返回值了,它返回的是exp_of,没错,就是内嵌函数 exp_of() 的调用地址,谁接受了它,谁就会成为这个函数,加上括号就是调用这个函数
     请参照下面的代码仔细体会
     a = input                      # 不会调用 input()
     b = print                      # 不会调用 print()
     x = a("请输入您的姓名:")       # a() 就是 input()
     b("您好," , x)                # b() 就是 print() 

最佳答案

查看完整内容

注意到 power() 的返回值了,它返回的是exp_of,没错,就是内嵌函数 exp_of() 的调用地址,谁接受了它,谁就会成为这个函数,加上括号就是调用这个函数 请参照下面的代码仔细体会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-24 16:48:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-24 21:07 编辑
def power(exp):
    def exp_of(base):
        return base ** exp
    return exp_of   # 返回内嵌函数 exp_of() 的调用地址

square = power(2)   # quare 得到了以 2 为 exp 参数,exp_of() 函数的调用地址 
cube = power(3)     # cube  得到了以 3 为 exp 参数,exp_of() 函数的调用地址
square(5)           # 以 5 为 base 参数,2 为 exp 参数,调用函数 power(exp) 的内嵌函数 exp_of(base)
cube(5)             # 以 5 为 base 参数,3 为 exp 参数,调用函数 power(exp) 的内嵌函数 exp_of(base)
     注意到 power() 的返回值了,它返回的是exp_of,没错,就是内嵌函数 exp_of() 的调用地址,谁接受了它,谁就会成为这个函数,加上括号就是调用这个函数
     请参照下面的代码仔细体会
     a = input                      # 不会调用 input()
     b = print                      # 不会调用 print()
     x = a("请输入您的姓名:")       # a() 就是 input()
     b("您好," , x)                # b() 就是 print() 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-24 16:54:41 From FishC Mobile | 显示全部楼层
这两个5都是底数,那个2和3都是指数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 05:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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