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)
我最近刚开始在 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
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)