Почему параметр для лямбда-функции передается так? - PullRequest
1 голос
/ 05 июня 2019
people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']

def split_title_and_name(person):
    return person.split()[0] + ' ' + person.split()[-1]

#option 1
for person in people:
    print(split_title_and_name(person) == (lambda x: x.split()[0] + ' ' + x.split()[-1])(person))

Когда и где использовать вышеуказанный лямбда-параметр.Поскольку лямбда-параметр, использованный выше, равен x, но после лямбда-функции список лиц передается в круглых скобках, который заменяет x.

. Для приведенного выше кода я получаю 4 True из-за 4 элементов в списке.

#option 1
for person in people:
    print(split_title_and_name(person) == (lambda person: person.split()[0] + ' ' + person.split()[-1]))

Но этот код не показывает тот же результат.Даёт 4 ложных

1 Ответ

1 голос
/ 05 июня 2019

(lambda x: x.split()[0] + ' ' + x.split()[-1])(person) эквивалентен следующему коду:

def any_name(x):
    return x.split()[0] + ' ' + x.split()[-1]

any_name(person)

Как видите, lambda создает анонимную функцию, которая вызывается сразу и отбрасывается; x является формальным параметром, а person является фактическим параметром. Имя формального параметра в определении функции не имеет значения; это также может быть person.

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