что означают скобки за лямбдой? — питон

#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. Спасибо вам за вашу помощь! я понимаю, что я сейчас делаю!