#python
Вопрос:
я новичок в python, и мне интересно, почему это не работает для лямбда в python ?
for person in people:
print(lambda person:person.split()[0] ' ' person.split()[-1])
Результаты:
<function <lambda> at 0x7f9d04332ed8>
<function <lambda> at 0x7f9d04332ed8>
<function <lambda> at 0x7f9d04332ed8>
<function <lambda> at 0x7f9d04332ed8>
но вместо этого было дано следующее решение
for person in people:
print((lambda person:person.split()[0] ' ' person.split()[-1])(person))
Результаты:
Dr. Brooks
Dr. Collins-Thompson
Dr. Vydiswaran
Dr. Romero
Что значит добавить » (человек)» за лямбда-выражением? и что означает первый результат?
Спасибо за ваши ответы, я глубоко признателен вам за ваши объяснения!
Комментарии:
1.
lambda
это функция, поэтому вам нужно ее вызвать
Ответ №1:
Лямбда — это функция. Ваше может быть написано так:
lambda person:person.split()[0] ' ' person.split()[-1]
Но это то же самое, что и это:
def myLambda(person):
return person.split()[0] ' ' person.split()[-1]
И, конечно, нужно позвонить обоим. Для вызова функции следует использовать ее имя, за которым следует скобка: myLambda()
но вы не выделили имя лямбда-функции. Вместо этого, заключив его в скобки, мы получаем функцию. Затем вы можете поставить скобки в конце, чтобы вызвать его:
# ------------ lambda function is in parenthesis -----------##-and then called with the `person` variable
(lambda person:person.split()[0] ' ' person.split() [-1])(person)
Комментарии:
1. Спасибо вам за ваш ответ! теперь я понимаю!
Ответ №2:
lambda
Выражение определяет анонимную функцию.
Как и другие функции, он ничего не делает, пока вы его не вызовете.
Я подозреваю, что вы можете запутаться, называя lambda
параметр так же, как переменную цикла — это совершенно разные вещи.
Благодаря уникальному именованию ваш код становится
for person in people:
print(lambda p:p.split()[0] ' ' p.split()[-1])
for person in people:
print((lambda p:p.split()[0] ' ' p.split()[-1])(person))
что делает разницу более очевидной.
Обратите внимание, что в первой версии переменная цикла вообще не используется.
Еще более понятной является версия с именованной функцией:
def the_function(p):
return p.split()[0] ' ' p.split()[-1]
# First attempt
for person in people:
print(the_function)
# Second attempt
for person in people:
print(the_function(person))
Комментарии:
1. Спасибо вам за вашу помощь! я понимаю, что я сейчас делаю!