在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,如果是这样,如何做到呢?
当前回答
下面的示例代码适用于我。不确定它是否与这个问题直接相关,但希望它在其他情况下有所帮助。
a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))
其他回答
如果你还想打印,你可以导入未来模块
from __future__ import print_function
f = lambda x: print(x) if x%2 == 0 else False
Python中的Lambdas在允许使用的方面有相当大的限制。具体来说,你不能在它们的主体中有任何关键字(除了像and, not, or等操作符)。
所以,你不可能在你的例子中使用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
为什么不直接定义一个函数呢?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
在这种情况下,确实没有理由使用lambda。
您还可以使用逻辑运算符来拥有类似条件的东西
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
你可以在这里看到更多关于逻辑运算符的信息