有没有办法在python lambda中执行“if”

问题描述 投票:295回答:12

在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

这显然不是语法。有可能在if执行lambda,如果是这样的话怎么办?

谢谢

python lambda python-2.6
12个回答
577
投票

您正在寻找的语法:

lambda x: True if x % 2 == 0 else False

但你不能在lambda中使用printraise


1
投票

您还可以使用逻辑运算符来获取类似条件的内容

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

您可以在这里找到更多关于Logical Operators here的内容


0
投票

以下示例代码适用于我。不确定它是否与这个问题直接相关,但希望它在其他一些情况下有所帮助。

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

0
投票

试试吧:

is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))

日期:

True
False

37
投票

你为什么不定义一个函数?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

在这种情况下,确实没有理由使用lambda。


21
投票

可能是我到目前为止写的最糟糕的python系列:

f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])

如果你打印x == 2,

如果x!= 2你加注。


20
投票

你可以轻松地在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体内做太多东西。


14
投票

Python中的Lambdas对于您允许使用的内容具有相当的限制性。具体来说,你不能在他们的身体中拥有任何关键词(除了andnotor等运算符)。

所以,你无法使用lambda作为你的例子(因为你不能使用raise),但是如果你愿意承认...你可以使用:

f = lambda x: x == 2 and x or None

9
投票

请注意,您可以在lambda定义中使用其他几个... if语句:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

2
投票

如果您仍想打印,可以导入将来的模块

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False

2
投票

你需要的是什么

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

现在以您需要的方式调用该函数

f(2)
f(3)

2
投票

这段代码应该可以帮到你:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))
© www.soinside.com 2019 - 2024. All rights reserved.