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

假装没事ソ 提交于 2020-03-19 17:37:29

3 月,跳不动了?>>>

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 ,如果可以的话怎么做?

谢谢


#1楼

Python中的Lambdas对于您允许使用的内容具有相当的限制性。 特别是,你不能有任何关键字(除了像运营商andnotor等)在他们的身上。

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

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

#2楼

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

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

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


#3楼

您正在寻找的语法:

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

但是你不能在lambda中使用printraise


#4楼

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


#5楼

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

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

如果你打印x == 2,

如果x!= 2你加注。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!