为什么这样传递lambda函数的参数?

时间:2019-06-05 01:03:02

标签: python lambda

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))

何时何地使用上述lambda参数。由于上面使用的lambda参数是x,但在lambda函数之后,因此人员列表在圆括号内传递,该圆括号替代x。

对于上面的代码,由于列表中有4个项目,我得到4个True。

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

但是此代码未显示相同的结果。它给出了4个错误

1 个答案:

答案 0 :(得分:1)

(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