Guy*_*Guy 328 python lambda python-2.6
在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
Run Code Online (Sandbox Code Playgroud)
这显然不是语法.是否有可能执行ifin lambda和if if how to do it?
谢谢
Rob*_*ney 618
您正在寻找的语法:
lambda x: True if x % 2 == 0 else False
Run Code Online (Sandbox Code Playgroud)
但你不能使用print或raise在lambda中.
Sil*_*ost 40
你为什么不定义一个函数?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
Run Code Online (Sandbox Code Playgroud)
在这种情况下,确实没有理由使用lambda.
Gle*_*ard 22
你可以轻松地在lambda中引发一个异常,如果那是你真正想做的事情.
def Raise(exception):
raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))
Run Code Online (Sandbox Code Playgroud)
这是一个好主意吗?我的直觉一般是将错误报告从lambdas中删除; 让它的值为None并在调用者中引发错误.我不认为这本质上是邪恶的 - 我认为"y if x else z"语法本身更糟 - 只是确保你不要试图在lambda体内填充太多东西.
jim*_*iki 22
可能是我到目前为止写的最糟糕的python系列:
f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])
Run Code Online (Sandbox Code Playgroud)
如果你打印x == 2,
如果x!= 2你加注.
Dav*_*ver 14
Python中的Lambdas对于您允许使用的内容具有相当的限制性.特别是,你不能有任何关键字(除了像运营商and,not,or等),在他们的身上.
所以,你无法使用lambda作为你的例子(因为你不能使用raise),但是如果你愿意承认...你可以使用:
f = lambda x: x == 2 and x or None
Run Code Online (Sandbox Code Playgroud)
小智 9
请注意,您可以在lambda定义中使用其他几个... if语句:
f = lambda x: 1 if x>0 else 0 if x ==0 else -1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
437368 次 |
| 最近记录: |