我正在尝试理解lambdas并得到了这个想法,但我如何为Point2 [x,y]比较定义多个条件,所以类似于:
if x1 < x2: -1
if x1 == x2: 0
if x1 > x2: 1
答案 0 :(得分:5)
上面的代码相当于:
cmp(x1,x2)
或(丑陋的)lambda表达式:
lambda x1,x2: 1 if x1>x2 else (0 if x1==x2 else -1)
(仅适用于Python 2.6及更高版本)。
通常,您应该仅将lambda表达式用于
之类的函数def fun(...):
return ...
答案 1 :(得分:4)
my_compare = lambda x1,x2 : cmp(x1, x2)
my_compare( -100, 100 )
答案 2 :(得分:4)
在这种情况下,lambda表达式通常不是最好的。正如Jon Skeet所提到的,你将以多个if-else表达式结束:
lambda x1, x2: -1 if x1 < x2 else (0 if x1 == x2 else -1)
针对您的具体问题:
lambda x1, x2: cmp(x1, x2)
是要走的路。
答案 3 :(得分:3)
编辑:根据PEP308更新为真正的Python :)请注意,PEP有关于如何将其括起来的有趣信息,具体取决于您使用的Python版本。我不会尝试在这里重现它 - 只需阅读PEP!
怎么样:
-1 if x1 < x2 else (0 if x1 == x2 else 1)
(没有任何Python lambda表达式的知识,但这是在单个表达式中表达这种逻辑的一种相当常见的方式,我想这就是你所追求的。)
编辑:其他人建议使用cmp
- 我一直认为提问者实际上想要更复杂的逻辑,例如提供他们自己的比较,但是想要一般的形式“从一些条件中选择单一表达“。
答案 4 :(得分:0)
只需一行代码即可返回两个值中的最大值:
greater = lambda x,y : x if (x>y) else y
print(greater(3,5))