我很好奇lambda
函数和常规函数(用def
定义)之间的区别 - 在python级别。 (我知道程序员和使用每个程序员有什么不同。)
>>> def a():
return 1
>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>
我们可以看到 - python 知道 b
是lambda
函数而a
是常规函数。这是为什么?他们之间有什么区别到python ?
答案 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
创建匿名函数。这个想法取自函数式编程语言。通过这种方式,您可以创建函数并将其传递给其他函数,例如map
和filter
。 (看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);
});
def add(a,b):
return a+b
print(add(4,5))