三元运算符中的Lambda表达式



我正在尝试编写以下代码,但出现错误:

a = [x if lambda x:  x%2 ==0 else 0 for x in range(10)]
print(a)

错误指向lambda语句。利用她是违法的吗?是的,为什么,因为我所有的函数都返回布尔True或False。

除了[x if x%2 == 0 else 0 for x in range(10)]更短之外,您还可以使用lambda,但必须调用它。

使用默认arg(x=x(:

[x if (lambda x=x: x%2 ==0)() else 0 for x in range(10)]

或者通过显式传递x:

[x if (lambda x: x%2 ==0)(x) else 0 for x in range(10)]

任何一种情况的结果:

[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]

为了在列表理解中使用lambda函数,只需定义一个变量来存储函数:

func = lambda x: x % 2 == 0
a = [x if func(x) else 0 for x in range(10)]
print(a)

输出:

[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]

lambda x: x%2 ==0是一个函数,而不是一个条件。

为什么不使用这个呢?

a = [x if x%2 == 0 else 0 for x in range(10)]
print(a)

最新更新