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

sla*_*lum 34 python lambda

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

>>> def a():
    return 1

>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>
Run Code Online (Sandbox Code Playgroud)

我们可以看到 - python 知道b是一个lambda函数,并且a是一个常规函数.这是为什么?他们和python有什么区别?

Sim*_*ser 31

它们是相同的类型,因此它们以相同的方式处理:

>>> type(a)
<type 'function'>
>>> type(b)
<type 'function'>
Run Code Online (Sandbox Code Playgroud)

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

>>> a.func_name
'a'
>>> b.func_name
'<lambda>'
Run Code Online (Sandbox Code Playgroud)

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

  • lambda函数不能被pickle,因为它们没有与之关联的(唯一)名称.(因此,它们不能与`multiprocessing`一起使用 - 例如,它不止一次地使用'PicklingError`) (28认同)
  • 此外,值得指出的是`lambda`是一个表达式,而`def`是一个语句.由于`lambda`是一个表达式,它只能包含其他表达式(不允许任何语句) - 虽然这在程序员的层面上更是一个问题,而不是"为什么python会跟踪差异" (4认同)
  • lambdas也可以用作表达式,而传统函数则不能; 但我想你已经知道了. (2认同)

Mar*_*cin 13

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

在所有其他材料方面,它们会产生相同的对象 - 适用相同的范围和捕获规则.(非物质的区别是,lambda-created函数都有一个默认func_name"<lambda>"这可能会影响在深奥例手术. -例如试图酸洗函数).