有没有办法在Python的lambda中执行“if”

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 ,如果是的话怎么做?

谢谢

您正在寻找的语法:

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

但是你不能使用print或拉姆达。

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

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

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

可能是迄今为止我写的最糟糕的Python代码:

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

如果您打印x == 2,

如果x!= 2你提高。

如果这是你真正想做的事情,你可以很容易地在lambda中引发exception。

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

这是一个好主意吗? 总的来说,我的本能是把错误报告放在lambdas里面; 让它的值为None,并在调用者中引发错误。 不过,我认为这不是天生的邪恶 – 我认为“如果x else z”语法本身就更糟糕 – 只要确保你不会试图在lambda体中填入太多的东西。

Python中的Lambdas对于你允许使用的内容是相当严格的。 具体来说,你不能有任何关键字(除了运营商像, notor等)在他们的身体。

所以,你没有办法使用lambda作为你的例子(因为你不能使用raise ),但是如果你愿意承认这个…你可以使用:

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

请注意,您可以在您的lambda定义中使用其他几个… if语句:

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

如果你还想打印,你可以导入未来的模块

 from __future__ import print_function f = lambda x: print(x) if x%2 == 0 else False