Python中lambda和常规函数之间有什么区别?

2024-05-16 04:05:22 发布

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

我很好奇python级别的lambda函数和正则函数(用def定义)之间的区别。(我知道程序员和何时使用每一个程序有什么不同。)

>>> def a():
    return 1

>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>

我们可以看到-python知道b是一个lambda函数,而a是一个正则函数。为什么?它们与python的区别是什么?


Tags: lambda函数程序return定义deffunction级别
3条回答

lambda创建匿名函数。这个想法是从函数式编程语言中提取出来的。通过这种方式,您可以创建函数并将其传递给其他函数,如mapfilter。(看here
您也可以将正常函数传递给这些函数,但由于它们大多很简单,而且它们没有在其他地方使用过,因此不方便传递到定义新函数的整个过程。

举个例子,看看这个:

>>> a = [1, 2, 3, 4]
>>> print map( lambda x : x*2 + 1, a )
[3, 5, 7, 9, 11]

唯一的区别是(a)lambda的主体只能由一个表达式组成,其结果是从创建的函数返回的,(b)alambda表达式是一个计算为函数对象的表达式,而adef语句没有值,并创建一个函数对象并将其绑定到一个名称。

在所有其他重要方面,它们会产生相同的对象—应用相同的范围和捕获规则。(无形的区别在于,lambda创建的函数有一个默认的func_name}。这可能会影响深奥情况下的操作,例如尝试pickle函数)。

它们属于同一类型,因此它们的处理方式相同:

>>> type(a)
<type 'function'>
>>> type(b)
<type 'function'>

Python还知道b被定义为lambda函数,并将其设置为函数名:

>>> a.func_name
'a'
>>> b.func_name
'<lambda>'

换言之,它会影响函数的名称,但就Python而言,这两个函数都是函数,这意味着它们大多可以以相同的方式使用。有关pickling函数和lambda函数之间的重要区别,请参见下面的mgilson注释。

相关问题 更多 >