当前位置: 首页 > 面试题库 >

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

潘琪
2023-03-14
问题内容

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

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

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

很好的解释深表感谢。


问题答案:

不,您不能直接调用它,因为它是的局部变量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


 类似资料:
  • 我想在构造函数中访问多个位置的状态值。当我在构造函数中输入console.log(this)时,我可以看到可以访问特定的值,但是当我输入console.log this.state时,我没有定义。 这就是我想象的工作方式(我想访问CSSValue中的状态): 但是,当我运行此代码: 然后我在控制台中得到这个: 但是当我将console.logconsole.log(this.state)它打印未定

  • 问题内容: Python noob在这里。如何在“ fib”功能中掌握“内部”功能? 问题答案: 您不能,除非以某种方式返回,否则不能。 本质上是范围内的局部变量,您不能从外部访问函数的局部变量。(这甚至不会是有意义的,因为该功能正在运行时,除了不存在当地人想想看- 这将是有意义的访问的变量从功能之外吗?)

  • 我在Kotlin编程,我有日期类的扩展功能。 它在< code>onCreate中工作正常,但是在< code >异步任务中的< code>doInBackground中出现错误 我里面有这些线 < code > getCurrentDateTime()返回< code>Date类的实例,并且为< code>toString()中的参数给出了错误 也可以参数为公共开放的乐趣toString():字

  • 我一直不明白为什么我们能够从其他类调用一个类的构造函数。构造函数是一种方法,通常当试图从类中调用方法时,我们必须要么使该方法静态,这样我们就可以以 但是在构造函数的情况下,我们两者都不做。Java如何调用类的构造函数而不执行这些方法中的任何一个?我知道一个类的构造函数必须对你调用它的类可见,也就是说,如果你调用的类构造函数在不同的包中,你必须导入那个包。 那么,Java如何处理调用构造函数,而不必

  • 我试过这个: 但这扩展了弦中的基因,这不是我想要的。

  • 严格说来,Ruby中没有函数.但Kernel模块中定义的方法(可以在任何地方用做函数,因此)可被其他语言当做函数来调用.若您对这些方法进行再定义时,就必需考虑到对其他方面的影响. `str 把字符串str当做外部命令来运行,并以字符串方式返回命令的输出.使用`str`形式来调用该方法(还可以使用%x(...)表示法进行调用.请参考命令输出). 可以使用$?来了解命令的结束状态. 若您只想执行命令,