在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,如果是这样,如何做到呢?


当前回答

希望这能有所帮助

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

f = lambda x:  x==2   

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

其他回答

可能值得考虑np.where

注意,你可以使用其他几个…你的lambda定义中的If语句:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

你可以很容易地在lambda中引发一个异常,如果你真的想这么做的话。

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

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

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

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

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

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

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

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