这是我的pluralsight python类中的python函数:
def raise_to(exp):
def raise_to_exp(x):
return pow(x, exp)
return raise_to_exp
现在,讲师将打开一个交互式会话,并执行以下操作:
结果是25。如何或为什么传入两个不同的参数?现在我对这段代码进行了调试,这就是我观察到的。当我这样做时:
def raise_to(exp):
def raise_to_exp(x):
return pow(x, exp)
return raise_to_exp
square = raise_to(2)
print(square)
我得到:<function raise_to.<locals>.raise_to_exp at 0x00000246D1A88700>
,但如果我像讲师那样做
def raise_to(exp):
def raise_to_exp(x):
return pow(x, exp)
return raise_to_exp
square = raise_to(2)
print(square(5))
我得到25分。我想知道这是怎么回事。我知道这被称为python工厂函数,但它是如何工作的。函数是否存储了第一个参数,以便以后与传入的第二个参数一起使用
raise_to_exp
是由raise_to
定义的参数exp
上的闭包。调用raise_to(2)
时,返回一个函数,在该函数体中,变量exp
引用了定义raise_to_exp
的作用域中的变量这意味着
square
是一个函数,其中exp
绑定到2,因此大致相当于定义为了证明没有用值2替换
exp
的,您可以深入function
对象来更改exp
的值我最后的发言很大胆。你在这里返回一个函数。把它想象成
当你这样做的时候
现在
square
引用函数raise_to_exp
,因为raise_to
返回了raise_to_exp
函数square
可以在这里用作函数相关问题 更多 >
编程相关推荐