lambda和常规函数之间的python有什么区别?

时间:2012-09-04 13:44:55

标签: python lambda

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

>>> def a():
    return 1

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

我们可以看到 - python 知道 blambda函数而a是常规函数。这是为什么?他们之间有什么区别到python

5 个答案:

答案 0 :(得分:30)

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

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

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

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

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

答案 1 :(得分:13)

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

在所有其他重要方面,它们会产生相同的对象 - 适用相同的范围和捕获规则。 (非物质差异是lambda - 创建的函数默认func_name"<lambda>"。这可能会影响深奥案例中的操作 - 例如尝试腌制函数。)。

答案 2 :(得分:0)

lambda创建匿名函数。这个想法取自函数式编程语言。通过这种方式,您可以创建函数并将其传递给其他函数,例如mapfilter。 (看here
你也可以将正常的函数传递给这些函数,但由于它们大多数都是简单的,并且它们在其他任何地方都没有使用过,所以通过定义一个新函数的整个过程是不方便的。

作为一个例子,看看这个:

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

答案 3 :(得分:0)

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>

两者都返回相同的输出值。仅返回的对象不同。 Function和Lambda的“ func”名称。

答案 4 :(得分:0)

首先考虑diff b / w这两个。

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

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

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

定义功能

import { mount } from "enzyme"; // mount instead of `shallow` here

...
it('should render', () => {
  const component = mount(<MyComponent />); // `mount` here as well
  const wrapper = component.find('myClassName');
  expect(wrapper.length).toBe(1);
});

定义lambda

    def add(a,b):
      return a+b
    print(add(4,5))