关于Lambda函数变量的困惑

2024-06-16 12:57:31 发布

您现在位置:Python中文网/ 问答频道 /正文

people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']\

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

第一个for循环返回中间已删除的人员列表,但我不明白为什么在末尾添加“person”?这是不是说我们的意思是“x”是在人员列表中运行的人员

此外,我尝试了不同的for循环:

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

这对我来说更有意义,但它会返回:

<function <lambda> at 0x7fab41922a60>
<function <lambda> at 0x7fab41922a60>
<function <lambda> at 0x7fab41922a60>
<function <lambda> at 0x7fab41922a60>

为什么??任何帮助都是非常感谢的,我真的很努力地学习这门语言,但它仍然是如此模糊对我来说


Tags: lambdain列表for人员functionpeopleat
3条回答

lambda是函数,(person)调用该函数,如果我们使用变量存储lambda表达式,这应该更清楚

people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']
for person in people:
    print((lambda x: x.split()[0] + ' ' + x.split()[-1])(person))

可能被改写为

people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']
func = (lambda x: x.split()[0] + ' ' + x.split()[-1])
for person in people:
    print(func(person))

请记住,在变量中存储lambdapython中是不受鼓励的,所以为了使其符合良好的样式,您可以将其更改为

def func(x):
    return x.split()[0] + ' ' + x.split()[-1]
people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']
for person in people:
    print(func(person))

当你这样做的时候

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

打印lambda的主题本身,同时对它们的输出值感兴趣

这里有几行:

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

是非常糟糕的代码,因为它不必要地使用了lambda

他们的意思可能是:

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

它在索引之前执行.split()一次

这句话的意思是:

(lambda x: x.split()[0] + ' ' + x.split()[-1])(person)

is do是在一行中创建和执行lambda。末尾的(person)正在调用参数为personlambda,该参数将成为lambda的x参数

lambda基本上是函数。如documentation中所述:

lambda_expr ::=  "lambda" [parameter_list] ":" expression

Lambda expressions (sometimes called lambda forms) are used to create anonymous functions. The expression lambda parameters: expression yields a function object. The unnamed object behaves like a function object defined with:

def <lambda>(parameters):
    return expression

See section Function definitions for the syntax of parameter lists. Note that functions created with lambda expressions cannot contain statements or annotations.

因此,我建议您不要在此处使用lambda:

for person in people:
    print(person.split()[0] + ' ' + person.split()[-1])

lambda默认情况下提供实例对象,如<function <lambda> at 0x7fab41922a60>

相关问题 更多 >