我想知道如何访问另一个函数中的一个函数。我看到了这样的代码:
>>> def make_adder(x): def adder(y): return x+y return adder >>> a = make_adder(5) >>> a(10) 15
那么,还有另一种方法来调用该adder 函数吗?我的第二个问题是,为什么在最后一行中我adder不打电话adder(...)?
adder
adder(...)
很好的解释深表感谢。
不,您不能直接调用它,因为它是的局部变量make_adder。
make_adder
您需要使用,adder()因为return adder调用adder时返回了函数对象make_adder(5)。要执行此功能对象,您需要()
adder()
return adder
make_adder(5)
()
def make_adder(x): def adder(y): return x+y return adder ... >>> make_adder(5) #returns the function object adder <function adder at 0x9fefa74>
在这里您可以直接调用它,因为您可以访问它,因为它是由函数返回的make_adder。返回的对象实际上称为 闭包, 因为即使函数make_addr已经返回,adder由它返回的函数对象仍然可以访问变量x。在py3.x中,您还可以修改xusingnonlocal语句的值。
make_addr
x
nonlocal
>>> make_adder(5)(10) 15
Py3.x示例:
>>> def make_addr(x): def adder(y): nonlocal x x += 1 return x+y return adder ... >>> f = make_addr(5) >>> f(5) #with each call x gets incremented 11 >>> f(5) 12 #g gets it's own closure, it is not related to f anyhow. i.e each call to # make_addr returns a new closure. >>> g = make_addr(5) >>> g(5) 11 >>> g(6) 13