Функция сравнения в Python с использованием Lambdas - PullRequest
1 голос
/ 06 февраля 2009

Я пытаюсь понять лямбды, и я понимаю, но как определить несколько условий для сравнения Point2 [x, y], что-то вроде:

if x1 < x2: -1
if x1 == x2: 0
if x1 > x2: 1

Ответы [ 5 ]

5 голосов
/ 06 февраля 2009

Код выше эквивалентен:

cmp(x1,x2)

или в (некрасивом) лямбда-выражении:

lambda x1,x2: 1 if x1>x2 else (0 if x1==x2 else -1)

(работает только в Python 2.6 и выше).

Обычно вы должны использовать лямбда-выражения только для таких функций, как

def fun(...):
    return ...
4 голосов
/ 06 февраля 2009

В таком случае лямбда-выражения обычно не лучшая вещь. Как упоминал Джон Скит, вы закончите несколькими выражениями if-else:

lambda x1, x2: -1 if x1 < x2 else (0 if x1 == x2 else -1)

Для вашей конкретной задачи:

lambda x1, x2: cmp(x1, x2)

- это путь.

4 голосов
/ 06 февраля 2009
my_compare = lambda x1,x2 : cmp(x1, x2)
my_compare( -100, 100 )
3 голосов
/ 06 февраля 2009

EDIT: обновлен до реального Python в соответствии с PEP308 :) Обратите внимание, что в PEP есть интересная информация о том, как это следует заключить в скобки в зависимости от используемой версии Python. Я не буду пытаться воспроизвести это здесь - просто прочитайте ПКП!

Как насчет:

-1 if x1 < x2 else (0 if x1 == x2 else 1)

(Это без каких-либо знаний о лямбда-выражениях Python, но это довольно распространенный способ выражения этой логики в одном выражении, которое, я думаю, именно то, что вам нужно.)

РЕДАКТИРОВАТЬ: Другие предлагали использовать cmp - я предполагал, что спрашивающий на самом деле хочет более сложную логику, такую ​​как предоставление своих собственных сравнений, но хочет общую форму «выбрать из нескольких условий в одном выражении» ».

0 голосов
/ 06 января 2019

Просто одна строка кода для возврата наибольшего из двух значений:

greater = lambda x,y : x if (x>y) else y   
print(greater(3,5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...