[英]Is there a way to perform "if" in python's lambda?
在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 x: True if x % 2 == 0 else False
但是您不能在 lambda 中使用print
或raise
。
你为什么不定义一个函数?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
在这种情况下确实没有理由使用 lambda。
可能是我迄今为止写过的最糟糕的 python 代码行:
f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])
如果 x == 2 你打印,
如果 x != 2 你加注。
如果这是您真正想要做的,您可以轻松地在 lambda 中引发异常。
def Raise(exception):
raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))
这是一个好主意吗? 我的本能通常是将错误报告排除在 lambda 之外; 让它的值为 None 并在调用者中引发错误。 不过,我不认为这本质上是邪恶的——我认为“y if x else z”语法本身更糟——只要确保你没有试图在 lambda 主体中塞入太多东西。
Python 中的 Lambda 对您可以使用的内容相当严格。 具体来说,它们的主体中不能有任何关键字(除了像and
、 not
、 or
等运算符)。
因此,您无法在示例中使用 lambda(因为您不能使用raise
),但是如果您愿意承认这一点……您可以使用:
f = lambda x: x == 2 and x or None
请注意,您可以在 lambda 定义中使用多个else...if语句:
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
您可以在此处查看有关逻辑运算符的更多信息
你真正需要的是
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 则返回 1 否则返回 0
f = lambda x: 1 if x=="M" else 0
给定场景的解决方案是:
f = lambda x : x if x == 2 else print("number is not 2")
f(30) # number is not 2
f(2) #2
以下示例代码对我有用。 不确定它是否与这个问题直接相关,但希望它在其他一些情况下有所帮助。
a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))
尝试一下:
is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))
出去:
True
False
希望这会有所帮助
您可以通过以下方式解决此问题
f = lambda x: x==2
if f(3):
print("do logic")
else:
print("another logic")
我想这就是你要找的
>>> f = lambda x : print(x) if x==2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>>
可能值得考虑np.where
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.