一尘不染

如何在函数内部访问函数?

python

我想知道如何访问另一个函数中的一个函数。我看到了这样的代码:

>>> def make_adder(x):
      def adder(y):
        return x+y
      return adder
>>> a = make_adder(5)
>>> a(10)
15

那么,还有另一种方法来调用该adder 函数吗?我的第二个问题是,为什么在最后一行中我adder不打电话adder(...)

很好的解释深表感谢。


阅读 176

收藏
2020-12-20

共1个答案

一尘不染

不,您不能直接调用它,因为它是的局部变量make_adder

您需要使用,adder()因为return adder调用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_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
2020-12-20