在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,如果是这样,如何做到呢?
当前回答
这可能是我迄今为止写过的最差的python语句:
f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])
如果x == 2输出,
如果x != 2,你提高。
其他回答
希望这能有所帮助
您可以通过以下方式解决此问题
f = lambda x: x==2
if f(3):
print("do logic")
else:
print("another logic")
注意,你可以使用其他几个…你的lambda定义中的If语句:
f = lambda x: 1 if x>0 else 0 if x ==0 else -1
您还可以使用逻辑运算符来拥有类似条件的东西
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
你可以在这里看到更多关于逻辑运算符的信息
你可以很容易地在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体中塞太多东西。
可能值得考虑np.where