在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

这显然不是语法。是否有可能在lambda中执行一个if,如果是这样,如何做到呢?


当前回答

你真正需要的是

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

现在按需要的方式调用函数

f(2)
f(3)

其他回答

希望这能有所帮助

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

f = lambda x:  x==2   

if f(3):
  print("do logic")
else:
  print("another logic")

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

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

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

你不能在lambda中引发异常,但这是Python 3中的一种方式。X来做一些接近你的例子的事情:

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

另一个例子:

如果M为0则返回1

f = lambda x: 1 if x=="M" else 0

Python中的Lambdas在允许使用的方面有相当大的限制。具体来说,你不能在它们的主体中有任何关键字(除了像and, not, or等操作符)。

所以,你不可能在你的例子中使用lambda(因为你不能使用raise),但如果你愿意让步的话,你可以使用:

f = lambda x: x == 2 and x or None

下面是使用Python 3.x的解决方案!

>>> f = lambda x: print(x) if x == 2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>>