在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,如果是这样,如何做到呢?
在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中执行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
其他回答
您还可以使用逻辑运算符来拥有类似条件的东西
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
你可以在这里看到更多关于逻辑运算符的信息
这可能是我迄今为止写过的最差的python语句:
f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])
如果x == 2输出,
如果x != 2,你提高。
你真正需要的是
def fun():
raise Exception()
f = lambda x:print x if x==2 else fun()
现在按需要的方式调用函数
f(2)
f(3)
Python中的Lambdas在允许使用的方面有相当大的限制。具体来说,你不能在它们的主体中有任何关键字(除了像and, not, or等操作符)。
所以,你不可能在你的例子中使用lambda(因为你不能使用raise),但如果你愿意让步的话,你可以使用:
f = lambda x: x == 2 and x or None
可能值得考虑np.where