Lambdas是匿名的,这意味着他们没有名字.
如果你觉得他们应该有一个名字,你总是可以给__name__指定一个名字:
myfunc_l = lambda: None
myfunc_l.__name__ = 'foo'
请注意,Python无法知道您已将lambda函数对象分配给特定名称;赋值发生在执行lambda表达式之后.记住,你甚至不需要分配一个lambda:
result = (lambda x: x ** 2)(4)
或者您可以将lambda存储在列表中:
several_lambdas = [lambda y: (y // 2) for y in range(10, 20)]
并且在这两个上下文中都没有要分配给这些对象的名称.
另一方面,完整的函数定义是语句,而不是表达式,def语句要求您指定名称.在不命名结果函数的情况下,永远不能使用def语句,这就是Python可以为对象指定名称的原因:
>>> def foo(): pass
...
>>> print foo.__name__
'foo'
你仍然可以将foo分配给其他东西,删除foo全局引用,通过赋值__name__属性重命名函数对象,但它不会改变函数的性质.除了没有设置初始名称的上下文(以及它们只能表示单个表达式的事实)之外,lambdas是相同的.