我有一个相当长的方程式,我需要使用scipy.integrate.quad进行积分,并且想知道是否存在一种将lambda函数相互添加的方法。我的想法是这样的
y = lambda u: u**(-2) + 8
x = lambda u: numpy.exp(-u)
f = y + x
int = scipy.integrate.quad(f, 0, numpy.inf)
我真正使用的方程式要比我在这里暗示的要复杂得多,因此为了易于阅读,将方程式分解为更小,更易于管理的部分将很有用。
有没有办法与lambda函数相关?还是另一种甚至不需要lambda函数但会提供相同输出的方式?
在Python中,通常只将lambda用于非常简短的简单函数,这些函数很容易放入创建它们的行中。(某些语言有其他意见。)
正如@DSM在他们的评论中所暗示的那样,lambda本质上是创建函数的捷径,当不值得给它们命名时。
如果您正在做更复杂的事情,或者需要为代码命名以供以后参考,那么lambda表达式对您来说并不是捷径-而是,您可能还需要def
一个普通的旧函数。
因此,与其将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
函数和lambda都是“可调用的”,这意味着就它们而言,它们基本上是可互换的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
列表中,并减小为单个值)。
但是,如果您的代码像大多数代码一样,则仅按名称相互调用的常规函数将是最简单的编写和最容易阅读的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句