在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
Python中的Lambdas在允许使用的方面有相当大的限制。具体来说,你不能在它们的主体中有任何关键字(除了像and, not, or等操作符)。
and
not
or
所以,你不可能在你的例子中使用lambda(因为你不能使用raise),但如果你愿意在这一点上让步……你可以使用:
raise
f = lambda x: x == 2 and x or None
为什么不直接定义一个函数呢?
def f(x): if x == 2: print(x) else: raise ValueError
在这种情况下,确实没有理由使用lambda。
你要找的语法:
lambda x: True if x % 2 == 0 else False
但是你不能在lambda中使用print或raise。
print
你可以很容易地在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体中塞太多东西。
这可能是我迄今为止写过的最差的python语句:
f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])
如果x == 2输出,
如果x != 2,你提高。
注意你可以在你的lambda定义中使用几个其他的……如果语句:
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
您还可以使用逻辑运算符来拥有类似条件的东西
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
你可以看到更多关于逻辑运算符在这里
下面的示例代码适用于我。不确定它是否与这个问题直接相关,但希望它在其他情况下有所帮助。
a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))
你真正需要的是
def fun(): raise Exception() f = lambda x:print x if x==2 else fun()
现在按需要的方式调用函数
f(2) f(3)
这段代码应该可以帮助您:
x = lambda age: 'Older' if age > 30 else 'Younger' print(x(40))
在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
希望这能有所帮助
您可以通过以下方式解决此问题
f = lambda x: x==2 if f(3): print("do logic") else: print("another logic")
下面是使用Python 3.x的解决方案!
>>> f = lambda x: print(x) if x == 2 else print("ERROR") >>> f(23) ERROR >>> f(2) 2 >>>
给定场景的解决方案是:
f = lambda x : x if x == 2 else print("number is not 2") f(30) # number is not 2 f(2) #2
它可能值得考虑np.where