lambda 后面的括号是什么意思?- Python

猕猴桃

我是 python 新手,我想知道为什么这对 python 中的 lambda 不起作用?

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

在 lambda 表达式后面添加 '(person)' 是什么意思?第一个结果是什么意思?

感谢您的回答,非常感谢您的解释!

莫布迪尼洛

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章