我很好奇的区别lambda
函数和常规函数(定义def
) -在蟒蛇的水平。 (我知道什么是程序员,以及何时使用每个人的差异。)
>>> def a():
return 1
>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>
正如我们看到的-蟒蛇知道 b
是一个lambda
功能, a
是有规律的功能。 这是为什么? 就是到Python它们之间的区别?
他们是同一类型,因此它们以相同方式处理:
>>> type(a)
<type 'function'>
>>> type(b)
<type 'function'>
蟒蛇也知道b
被定义为一个lambda函数,并将它设置,作为函数名称:
>>> a.func_name
'a'
>>> b.func_name
'<lambda>'
换句话说,它影响该功能会得到,但据Python的来讲,都是功能,这意味着他们可以以同样的方式被大多使用的名称。 见下面mgilson的意见,关于酸洗功能和lambda函数之间的一个重要区别。
唯一的区别是,(a)中的λ的主体可以仅由一个单一的表达,其结果是从所创建的功能,并返回(b)的一个lambda
表达式是将计算得到一个功能对象的表达式,而def
语句没有价值,并创建一个函数对象,并将其绑定到一个名称。
在其他所有重大方面它们导致相同的对象 - 在同一范围和捕获规则。 (非物质的区别是, lambda
-created函数都有一个默认func_name
的"<lambda>"
在深奥情况下这可能会影响操作。 -例如试图酸洗函数)。
lambda
创建匿名函数。 这个想法已经采取了从函数式编程语言。 通过这种方式,你可以创建和传递功能,像其他功能map
和filter
。 (看这里 )
你可以通过正常的功能,这些功能太多,但因为他们大多是简单,他们已经不能用于其他地方,它通过对definfing新功能的全过程不方便。
作为一个例子来看看这个:
>>> a = [1, 2, 3, 4]
>>> print map( lambda x : x*2 + 1, a )
[3, 5, 7, 9, 11]
LAMBDA是一个内联函数,我们可以做任何功能,而函数名。 当我们用它作为参数传递给高阶函数是有帮助的。 例如:一个使用其他函数作为参数的函数。
函数定义的实施例:
>>> def func(a, b):
return a * b
>>> func(2,3)
6
>>> type(func)
<class 'function'>
>>> func
<function func at 0x034B6E88>
Lambda表达式的例子:
>>> multiply = lambda a, b: a * b
>>> multiply(2, 3)
6
>>> type(multiply)
<class 'function'>
>>> multiply
<function <lambda> at 0x034B6ED0>
这两个返回相同的输出值。 只有返回的对象是不同的。 “功能”名称功能和LAMBDA。