在Python中,你”通常只使用lambda表示非常简短的函数,这些函数可以很容易地放入创建它们的行内。 (某些语言有其他意见。)
由于@ DSM在他们的评论中暗示,lambdas本质上是创建函数时的一种快捷方式,因为它不值得给它们起个名字。
如果您正在做更复杂的事情,或者如果您需要为代码提供一个名称供以后参考,那么lambda表达式对您而言并不是什么捷径 - 相反,您可能还需要def
ine一个普通的旧功能。的
因此,而不是分配lambda表达式给一个变量:
y = lambda u: u**(-2) + 8
可以定义变量是一个函数:
def y(u):
return u**(-2) + 8
,让你的房间说明了一下,或者是更复杂,或者你需要做的任何事情:
def y(u):
"""
Bloopinate the input
u should be a positive integer for fastest results.
"""
offset = 8
bloop = u ** (-2)
return bloop + offset
函数和lambdas都是“callabl e“,这意味着就scipy.integrate.quad()
而言,它们实质上是可互换的。
要组合可调对象,可以使用多种不同的技巧。
def triple(x):
return x * 3
def square(x):
return x * x
def triple_square(x):
return triple(square(x))
def triple_plus_square(x):
return triple(x) + square(x)
def triple_plus_square_with_explaining_variables(x):
tripled = triple(x)
squared = square(x)
return tripled + squared
有更高级的选项,我只会考虑如果它使你的代码更清晰(它可能不会)。例如,你可以把可调用的列表:
all_the_things_i_want_to_do = [triple, square]
一旦他们在列表中,你可以使用基于列表的操作对他们的工作(包括将它们依次reduce
列表中向下一个值)。
但是,如果你的代码和大多数代码一样,那么按名称调用对方的常规函数将是最简单的编写和最容易阅读的。
我对'scipy.integrate.quad'不熟悉,但'f = lambda u:y(u)+ x(u)'是一种将两个函数加在一起的方法。 –
另外:如果你打算立即给你的函数一个名字,为什么你要使用'lambda'? – DSM
老实说,我使用lambda,因为我不知道任何其他选项与我非常有限的python经验,这就是为什么我加了最后一部分的问题。 – coffeepls