skywalker212 发表于 2022-10-24 16:48:45

闭包的参数传递问题

>>> 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呢?
这里不太理解。

jackz007 发表于 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()

wp231957 发表于 2022-10-24 16:54:41

这两个5都是底数,那个2和3都是指数
页: [1]
查看完整版本: 闭包的参数传递问题