闭包的参数传递问题
>>> 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 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() 这两个5都是底数,那个2和3都是指数
页:
[1]