三元运算符中的 Lambda 表达式

Lambda expression in ternary operator

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

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

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

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

为什么不用这个呢?

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

为了在您的列表理解中使用您的 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]

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

使用默认参数 (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]