【发布时间】:2010-10-06 00:14:43
【问题描述】:
我正在尝试理解 lambda,我明白了,但是如何为 Point2 [x,y] 比较定义多个条件,例如:
if x1 < x2: -1
if x1 == x2: 0
if x1 > x2: 1
【问题讨论】:
-
-1:花时间“理解” lambdas。它们的“def”拼写很有趣。
我正在尝试理解 lambda,我明白了,但是如何为 Point2 [x,y] 比较定义多个条件,例如:
if x1 < x2: -1
if x1 == x2: 0
if x1 > x2: 1
【问题讨论】:
上面的代码相当于:
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 ...
【讨论】:
my_compare = lambda x1,x2 : cmp(x1, x2)
my_compare( -100, 100 )
【讨论】:
在这种情况下,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)
是要走的路。
【讨论】:
编辑:根据PEP308 更新为真正的 Python :) 请注意,PEP 有一些有趣的信息,说明如何根据您使用的 Python 版本将其括起来。我不会尝试在这里复制它 - 只需阅读 PEP!
怎么样:
-1 if x1 < x2 else (0 if x1 == x2 else 1)
(这对 Python lambda 表达式没有任何了解,但这是在单个表达式中表达此逻辑的一种相当常见的方式,我猜这就是您所追求的。)
编辑:其他人建议使用cmp - 我一直假设提问者实际上想要更复杂的逻辑,例如提供他们自己的比较,但想要“从单个表达式中的几个条件中选择”的一般形式”。
【讨论】:
只需一行代码即可返回两个值中的最大值:
greater = lambda x,y : x if (x>y) else y
print(greater(3,5))
【讨论】: