gpt4 book ai didi

python - 在python中添加具有相同运算符的lambda函数

转载 作者:IT老高 更新时间:2023-10-28 21:07:00 27 4
gpt4 key购买 nike

我有一个相当长的方程,我需要使用 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 表达式对您来说并不是什么捷径——相反,您不妨 定义一个普通的旧函数。

所以不要将 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将列表缩减为单个值)。

但是,如果您的代码与大多数代码一样,仅通过名称相互调用的常规函数​​将是最容易编写和最容易阅读的。

关于python - 在python中添加具有相同运算符的lambda函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34261390/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com