在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中引发一个异常,如果你真的想这么做的话。
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体中塞太多东西。
其他回答
如果你还想打印,你可以导入未来模块
from __future__ import print_function
f = lambda x: print(x) if x%2 == 0 else False
为什么不直接定义一个函数呢?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
在这种情况下,确实没有理由使用lambda。
下面的示例代码适用于我。不确定它是否与这个问题直接相关,但希望它在其他情况下有所帮助。
a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))
可能值得考虑np.where
在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