作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在 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/
我是一名优秀的程序员,十分优秀!