454

Python 2.6中,我想做:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

这显然不是语法。是否可以执行输入iflambda如果可以,该怎么做?

4

15 回答 15

820

您正在寻找的语法:

lambda x: True if x % 2 == 0 else False

但是你不能在 lambda 中使用printor 。raise

于 2009-10-18T16:48:43.807 回答
44

你为什么不直接定义一个函数?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

在这种情况下,确实没有理由使用 lambda。

于 2009-10-18T16:33:17.213 回答
39

可能是迄今为止我写过的最糟糕的 python 行:

f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])

如果 x == 2 你打印,

如果 x != 2 你加注。

于 2015-10-21T05:43:22.463 回答
26

如果这是您真正想要做的,您可以轻松地在 lambda 中引发异常。

def Raise(exception):
    raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))

这是一个好主意吗?一般来说,我的直觉是将错误报告排除在 lambda 之外。让它的值为 None 并在调用者中引发错误。不过,我不认为这本质上是邪恶的——我认为“y if x else z”语法本身更糟——只要确保你没有试图在 lambda 主体中塞进太多东西。

于 2009-10-18T21:48:06.663 回答
16

Python 中的 Lambda 对允许使用的内容相当严格。具体来说,您的正文中不能有任何关键字(除了 , , 等运算andnotor

因此,您无法在示例中使用 lambda(因为您不能使用raise),但是如果您愿意对此做出让步……您可以使用:

f = lambda x: x == 2 and x or None
于 2009-10-18T16:31:18.847 回答
16

请注意,您可以在 lambda 定义中使用多个else...if语句:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1
于 2016-11-22T14:38:13.977 回答
3

如果您仍想打印,您可以导入未来的模块

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False
于 2017-04-07T20:25:50.387 回答
2

您还可以使用逻辑运算符来获得类似条件的东西

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

您可以在此处查看有关逻辑运算符的更多信息

于 2018-06-12T22:41:14.157 回答
2

这个片段应该可以帮助你:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))
于 2018-12-16T13:16:15.477 回答
1

你真正需要的是

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

现在以您需要的方式调用该函数

f(2)
f(3)
于 2018-10-09T13:57:06.247 回答
1

在 lambda 中执行 if 的一种简单方法是使用列表推导。

您不能在 lambda 中引发异常,但这是 Python 3.x 中执行与您的示例类似的方法的一种方式:

f = lambda x: print(x) if x==2 else print("exception")

另一个例子:

如果 M 则返回 1,否则返回 0

f = lambda x: 1 if x=="M" else 0
于 2020-02-17T06:43:53.910 回答
1

给定场景的解决方案是:

f = lambda x : x if x == 2 else print("number is not 2")
f(30)  # number is not 2
f(2)   #2
于 2020-08-13T07:49:51.440 回答
0

以下示例代码对我有用。不确定它是否与这个问题直接相关,但希望它在其他一些情况下有所帮助。

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))
于 2018-08-04T03:51:13.833 回答
0

如果您使用 Python 3.x,这就是解决方案!

>>> f = lambda x: print(x) if x == 2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>> 
于 2020-07-27T15:10:55.550 回答
0

希望这会有所帮助

您可以通过以下方式解决此问题

f = lambda x:  x==2   

if f(3):
  print("do logic")
else:
  print("another logic")
于 2020-07-27T12:00:34.320 回答