我是 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] 删除。
我来说两句