【发布时间】:2013-03-24 05:59:15
【问题描述】:
抱歉,如果以前有人问过这个问题,但我在任何地方都看不到。
基本上我遇到了一个场景,我需要在 lambda 函数中使用 if 语句。困难在于理想情况下它需要在一行代码中(如果可能的话?)
通常,我会这样写:
T = 250
if (T > 200):
rate = 200*exp(-T)
else:
rate = 400*exp(-T)
return (rate)
但是我需要它看起来像这样:
rate = lambda(T) : if (T>200): return(200*exp(-T)); else: return(400*exp(-T))
我意识到更容易做的事情是在 lambda 函数之外做出决策,然后为每种情况使用一个单独的 lambda 函数,但这并不适合这里。 lambda 函数存储在一个数组中,并在需要时访问,每个数组元素对应一个特定的“速率”,因此对于相同的“速率”有两个单独的行会搞砸。任何帮助将不胜感激,或者如果不可能,其他人的一些确认会很好:)
【问题讨论】:
-
我怀疑你需要一个单行 lambda 函数,因为我怀疑你需要一个单行函数,我怀疑你需要一个 lambda 函数而不是命名函数。如果您要立即将函数名称命名为
rate,那么使用lambda有什么意义? -
太糟糕了,我只能 +1 DSM 一次......但要明确一点:更容易做的不是“在 lambda 函数之外做出决策”,而是将它们定义为首先是常规功能。您可以将常规函数存储在数组中。 lambdas 没有什么特别之处。它们是更有限的功能,而不是更强大的功能。
-
那么函数需要放在一行中,我认为您不能使用命名函数来做到这一点?这些函数也存储为字符串,然后使用“eval”进行评估,我不确定如何使用常规函数。
-
首先,为什么它需要放在一行中?其次,为什么将它们存储为字符串,然后使用
eval进行评估?这些都是非常糟糕的要求。我怀疑这里有一个XY problem,如果你告诉我们你真正想要做什么,我们可以解释正确的方法。
标签: python if-statement lambda ternary-operator conditional-operator