除了 def 语句之外,Python 还提供了一种生成函数对象的表达式形式:lambda 。
这个表达式创建了一个能够调用的函数,但是它返回了一个函数对象而不是将这个函数对象赋值给一个变量名。这也就是 lambda 有时叫做匿名(也就是没有函数名)函数的原因。
lambda的一般形式是:关键字 lambda,之后是一个或多个参数(相当于 def 语句头部内用括号括起来的参数列表),紧跟着的是一个冒号,之后是一个表达式,这个表达式的定义体必须和声明放在同一行。参数是可选的,如果使用的参数话,参数通常也是表达式的一部分。
lambda [argument1, argument2, .... argumentn]: expression
由 lambda 表达式所返回的函数对象与由 def 创建并赋值后的函数对象工作起来是完全一样的,但是 lambda 有一些不同之处让其在扮演特定的角色时很有用:
lambda 是一个表达式,而不是一个语句
lambda 表达式能够出现在 Python 语句语法上不允许 def 出现的地方。例如:在一个列表常量中或者函数调用的参数中。此外作为一个表达式,lambda 返回了一个值(一个新的函数对象),可以选择性地赋值给一个变量名。相反,def 语句总是得在头部将一个新的函数赋值给一个变量名,而不是将这个函数作为结果返回。
lambda 的主体是一个单个的表达式或语句,而不是一个代码块
lambda 通常要比 def 功能要小:你仅能够在 lambda 主体中封装有限的逻辑进去,连 if 这样的语句都不能够使用。这是有意设计的——它限制了程序的嵌套:lambda 是一个为编写简单的函数而设计的,而 def 用来处理更大的任务。
除了这些差别,def 和 lambda 都能够做同样种类的工作。








暂无数据