【问题标题】:What is the syntax for the input for a def function with multiple nested functions?具有多个嵌套函数的 def 函数的输入语法是什么?
【发布时间】:2019-01-22 16:36:58
【问题描述】:

我现在正在学习 Python,我只是想掌握所有的语法选项。

目前,我似乎无法搜索到的唯一一件事是,如果我出于某种原因想要定义一个包含多个其他定义的函数,该怎么办。

虽然我知道如果较大的定义内只有 1 个定义该怎么办(如果排除下面的第二个定义,则 val = f()(3,4) 返回 7),但我不知道如何正确使用下面的函数。

如果可能,其中包含任意数量的已定义函数的 def 函数的语法是什么?


代码:

def f():
    def x(a,b):
        return a + b
    return x
    def y(c,d):
        return c + d
    return y

 val = f()(3,4)(5,6)
 print(val)

我希望上面返回 (7,11) 或 11。但是,它返回 'int object is not callable'

【问题讨论】:

  • 如果你想让f返回x返回y,你必须嵌套更深。目前y 甚至从未被定义,因为您在到达它之前return x
  • 这不是语法问题,而是语义问题。准确地理解你想要做什么,并且语法几乎是不言自明的。您希望f 返回一个返回一个函数的函数;即,yx 内部定义并由x 返回,而不是f

标签: python function closures nested-function


【解决方案1】:

当你写val = f()(3,4)(5,6)时,你希望f返回一个返回一个函数的函数;与更简单的多行调用比较:

t1 = f()
t2 = t1(3,4)
val = t2(5,6)

函数f 定义并返回必须定义并返回一个可以用两个参数调用的函数。所以,正如@jonrsharpe 所说,你需要 more 嵌套:

def f():
    def x(a, b):
        def y(c, d):
            return c + d
        return y
    return x

现在,f() 生成名为 x 的函数,f()(3,4) 生成名为 y 的函数(忽略过程中的参数 3 和 4),f()(3,4)(5,6) (最终)计算为 @987654331 @。

【讨论】:

    最近更新 更多