对于python来说,lambda和常规函数有什么不同?

对于python来说,lambda和常规函数有什么不同?,python,lambda,Python,Lambda,我很好奇lambda函数和python级别的常规函数(用def定义)之间的区别。(我知道程序员有什么不同,以及何时使用每一个。) >>定义a(): 返回1 >>>b=λ:1 >>>a >>>b 正如我们所见,python知道b是一个lambda函数,a是一个常规函数。为什么呢?它们与python的区别是什么?它们是相同的类型,因此被以相同的方式对待: >>> type(a) <type 'function'> >>> type(b) <ty

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

>>定义a():
返回1
>>>b=λ:1
>>>a
>>>b

正如我们所见,python知道
b
是一个
lambda
函数,
a
是一个常规函数。为什么呢?它们与python的区别是什么?

它们是相同的类型,因此被以相同的方式对待:

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

换句话说,它会影响函数将获得的名称,但就Python而言,这两个函数都是函数,这意味着它们可以以相同的方式使用。有关函数和lambda函数在酸洗方面的重要区别,请参见下面的mgilson评论。

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


在所有其他重要方面,它们会产生相同的对象-相同的范围和捕获规则适用。(非实质性差异是
lambda
-创建的函数有一个默认的
func\u name
。这可能会影响深奥情况下的操作-例如,尝试pickle函数。)。

lambda
创建一个匿名函数。这个想法来自函数式编程语言。通过这种方式,您可以创建该函数并将其传递给其他函数,如
map
filter
。(看)
您也可以将普通函数传递给这些函数,但由于它们大多很简单,并且不在其他任何地方使用,因此在定义新函数的整个过程中都很不方便。

作为一个例子,请看以下内容:

>>> 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>
定义函数(a,b): 返回a*b >>>func(2,3) 6. >>>类型(func) >>>func Lambda表达式的示例:

>>> multiply = lambda a, b: a * b
>>> multiply(2, 3)
6
>>> type(multiply)
<class 'function'>
>>> multiply
<function <lambda> at 0x034B6ED0>
乘法=λa,b:a*b >>>乘(2,3) 6. >>>类型(乘法) >>>倍增
两者都返回相同的输出值。只有返回的对象不同。函数的“FUNC”名称和lambda。

首先考虑差异b/w这两个。

Lambda函数:are运算符可以有任意数量的参数,但只能有一个表达式。它不能包含任何语句,并返回可分配给任何变量的函数对象。它们可以在创建它们的块中使用

def函数:函数有助于将程序分成更小的模块化块。随着我们的程序越来越大,功能使其更有组织性和可管理性。我们可以在任何地方调用和使用它们

在这里,您可以通过下面的示例获得更明显的区别

定义函数 定义lambda
无法对lambda函数进行pickle,因为它们没有关联的(唯一)名称。(因此,它们不能用于
多处理
,例如,它不止一次用
PicklingError
咬我)@mgilson:谢谢,很高兴知道。我已经更新了我的答案。另外,可能值得指出的是,
lambda
是一个表达式,而
def
是一个语句。由于
lambda
是一个表达式,因此它只能包含其他表达式(不允许使用任何语句)——尽管这在程序员层面上更像是一个问题,而不是“python为什么跟踪差异”,lambda也可以用作表达式,而传统函数不能;但是我想你已经知道了。考虑到内部
a
b
属于同一类型,即两者都是
函数
s,我假设两者没有性能优势?Python支持在运行时创建匿名函数(即不绑定名称的函数),使用名为“lambda”的构造。你可以登记。这意味着它没有给你函数的名称。@SuryawanshiManoj这个问题会让你相信OP不知道吗?@Marcin:正如Simeon Visser在回答中展示的例子,你可以理解OP不知道函数的名称谢谢你的回答,但请注意,我知道程序员之间的区别以及何时使用每一个(正如我在问题中所说的)。谢谢@Saurabh,但我的问题是python之间的区别是什么,而不是如何使用它。
>>> def func(a, b):
    return a * b

>>> func(2,3)
6
>>> type(func)
<class 'function'>
>>> func
<function func at 0x034B6E88>
>>> multiply = lambda a, b: a * b
>>> multiply(2, 3)
6
>>> type(multiply)
<class 'function'>
>>> multiply
<function <lambda> at 0x034B6ED0>
    def add(a,b):
      return a+b
    print(add(4,5))
    add = lambda x, y : x + y 
    print(add(4,5))