Python 3.x - returns 另一个函数的简单函数

Python 3.x - Simple function that returns another function

我最近刚开始在 Python 编程,我一直在尝试创建一个简单的函数,它接受两个参数 a 和 b,returns 是 a 的总和的结果和|b|。我想要 return f(a, b) 而不仅仅是 f。我知道我在当前代码中将 f 指定为 int,因此当我 运行 时它 returns "int not callable error"。所以我必须将 f 指定为某种函数。我很确定我在这里遗漏了一些基本的东西,我只是不确定到底是什么。感谢您的帮助!

from operator import add, sub

def a_plus_abs_b(a, b):
    """Return a+abs(b), but without calling abs.

    >>> a_plus_abs_b(2, 3)
    5
    >>> a_plus_abs_b(2, -3)
    5
    """
    if b < 0:
        f = sub(a, b)
    else:
        f = add(a, b)
    return f(a, b)
f = sub(a, b)

不会创建函数来计算结果,因此当您调用 f(a, b) 时,您调用的是一个整数。

要修复它,请根据 b

的符号将三元内联函数分配给 select 要创建的函数
f = sub if b < 0 else add

Jean-Fançois 的回答很好,但如果您不了解这背后的基本原理,您应该查看另一个使用 lambda 的示例:

def returns_function_example():
    return lambda arg1: arg1 + 2

function_returned = returns_function_example()

print(function_returned(1))

# Output = 3

运行 在你的调试器中看到 "function_returned" 确实是一个函数。您可以在调用 "print" 函数后连接点。

函数是 Pythonland 中的第一个 class 公民,因此您可以像操作任何其他对象一样操作它们。

假设您创建函数:

def add(a, b): return a + b

如果写成add,那就是一个函数。但是如果你写 add(2,4)add(a, b) 假设定义了 a 和 b,那么你是 调用 函数,所以你得到一个结果。这是两个完全不同的东西:f,一个 callable,和 f(a,b) 其中 returns 一个值。

所以如果你写:

>>> f = add
>>> type(f)
<class 'function'>

这就是你想要的,你现在有一个函数可以完全完成 add 的功能(你可以说它实际上是 is add)。

相比之下,如果你写:

>>> f = add(a,b)
>>> type(f)
<class 'int'>
>>> f
11

这是一个值。

长话短说:

from operator import add, sub

def a_plus_abs_b(a, b):
    """
    Return a+abs(b), but without calling abs.

    >>> a_plus_abs_b(2, 3)
    5
    >>> a_plus_abs_b(2, -3)
    5
    """
    if b < 0:
        f = sub
    else:
        f = add

    return f(a, b)