在python中使用相同的运算符添加lambda函数

coffeepls:

我有一个相当长的方程式,我需要使用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函数但会提供相同输出的方式?

RJHunter:

在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章