gpt4 book ai didi

python - 我可以使 lambda 函数的输出依赖于条件而无需声明函数来处理它吗?

转载 作者:行者123 更新时间:2023-11-30 21:50:55 24 4
gpt4 key购买 nike

我一直在 docs.python.org 上浏览 Python 教程,我刚刚了解到我可以通过执行以下操作来生成包含平方数的列表

lista1 = list(map(lambda x: x**2, range(19)))

在尝试这个时,我想写一些类似的东西,当 x 是偶数时,用 x -> x 填充列表,当 x 是奇数时,用 x -> x**3 填充列表。我想再次使用 lambda 函数来做到这一点,所以我尝试了

lista1 = list(map(lambda x:
if x % 2 == 0:
x
else:
x***3, range(19)))

遗憾的是,我发现这不是有效的 Python 语法。我知道我可以这样做,并且它有效,因为我尝试过:

def funcx(x):
if x % 2 == 0:
return x
else:
return x**3

lista4 = list(map(lambda x: funcx(x), range(19)))

但我想知道是否可以在不定义 funcx(x) 的情况下仅使用 lambda 函数来做到这一点。

谢谢!

最佳答案

lambda 必须是可以计算的表达式。它们不能包含任何声明。

幸运的是,Python 有一个三元运算符,允许您将第二个代码段中的“lambda”表示为

lambda x: (x) if (x % 2 == 0) else (x**3)

(这里的括号实际上是不必要的,但包含在内是为了使语法更加清晰。)

但是,在这种情况下,lambda 和 map 并不是最适合这项工作的工具。更好(更有效)的解决方案将利用 list comprehension :

lista4 = [(x if x % 2 == 0 else x**3) for x in range(19)]

使用这种方法,我们可以节省重复函数调用的开销,并更清楚地传达我们的意图。

<小时/>

顺便说一句,第二个代码片段中的 lambda 是多余的。表达式 lambda x: func(x) 可以简单地替换为 func。例如,

map(lambda x: funcx(x), range(19))

相同
map(funcx, range(19))

只是增加了开销和模糊性。

关于python - 我可以使 lambda 函数的输出依赖于条件而无需声明函数来处理它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253500/

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