должна быть какая-то разница между лямбда-питоном и обычной функцией? - PullRequest
0 голосов
/ 30 октября 2018

Я попробовал 2 фрагмента, чтобы выяснить разницу между Python лямбда и обычной функцией.

этот получит то, что ожидается.

b = range(6)
def greater_than2(b):
    if b > 2:
        return b

print(list(filter(lambda x: x > 2, b)))
print(list(filter(greater_than2, b)))

оба отпечатка дают [3, 4, 5].

но что-то идет с этим

b = range(6)

def less_than2(b):
    if b < 2:
        return b

print(list(filter(lambda x: x < 2, b)))
print(list(filter(less_than2, b)))

я получил следующий вывод

[0, 1]
[1]

Итак, в чем разница между лямбда-функцией и less_than2?

1 Ответ

0 голосов
/ 30 октября 2018

Ваши функции несопоставимы, greater_than2 необходимо вернуть логическое значение:

def greater_than2(b):
    return b > 2

Функция, определенная выше, вернет True при b > 2 или False при b <= 2.

Ваши обычные функции возвращают b. Давайте рассмотрим, что происходит с вашим вторым примером, где вы видите расхождение:

b = 0: less_than2 возвращает 0
b = 1: less_than2 возвращает 1
b = 2: less_than2 возвращает None
...
b = 5: less_than2 возвращает None

Обратите внимание, что если ваше условие if не выполнено, оператор return никогда не выполняется, и поэтому ваша функция вернет None. Единственное значение «Истина» этих возвращаемых значений - 1, при bool(0) и bool(None) - False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...