python lambda语法,python中lambda函数的定义和用法_1

  python lambda语法,python中lambda函数的定义和用法

  Lambda表达式是现代编程语言引入的一种语法。如果一个函数是一个已命名且可重用的代码块,那么lambda expression就是一个更灵活的代码块,可以在程序中传递和调用。

  回顾局部函数

  get_math_func()函数将返回三个局部函数之一。功能代码如下:

  defget_math_func(类型):

  #定义三个局部函数

  .

  #返回本地函数

  iftype==square:

  返回广场

  iftype==cube:

  返回多维数据集

  else:

  Returnfactorial由于局部函数的作用域在默认情况下只停留在它们的封闭函数内,所以这三个局部函数的函数名作用过于有限,也就是在程序的if语句中只作为返回值使用。一旦离开get_math_func()函数体,这三个局部函数的函数名就失去了意义。

  由于局部函数的函数名没有太多意义,可以考虑使用lambda表达式来简化局部函数的编写。

  使用 lambda 表达式代替局部函数

  如果使用lambda表达式来简化get_math_func()函数,可以将程序重写如下:

  defget_math_func(类型):

  结果=1

  #该函数返回一个Lambda表达式。

  iftype==square:

  returnlambdan:n*n#

  eliftype==cube:

  returnlambdan:n*n*n#

  else:

  returnlambdan:(1 n)*n/2#

  #调用get_math_func(),程序返回一个嵌套函数

  math_func=get_math_func(立方体)

  Print(math_func(5))#输出125

  math _ func=get _ math _ func( square )

  Print(math_func(5))#输出25

  math_func=get_math_func(其他)

  Print(math_func(5))# Output 15.0在上面的代码中,lambda表达式是由lambda关键字在return之后的部分定义的。Python要求lambda表达式只能是单行表达式。

  注意:由于lambda表达式只能是单行表达式,不允许更复杂的函数形式,所以上面的代码改为计算1 ^ 2 ^ 3…n的和,lambda表达式的语法格式如下:

  Lambda [parameter _ list] 3360表达式从上面的语法格式中,我们可以看出Lambda表达式的几个要点:

  Lambda表达式必须用lambda关键字定义。

  lambda关键字之后,冒号左边是参数列表,可以没有参数,也可以有多个参数。如果有多个参数,需要用逗号分隔。冒号右边是这个lambda表达式的返回值。

  实际上,lambda表达式的本质是一个匿名的单行函数。所以lambda表达式可以写成函数的形式。例如,对于以下lambda表达式:

  x,y:x y可以重写为以下函数形式:

  Defadd(x,y):returnx y上面定义函数时用的是简化语法:当函数体只有一行代码时,可以直接把函数体的代码和函数头放在同一行。一般来说,函数比lambda表达式适应性更强,lambda表达式只能创建简单的函数对象(只适用于函数体是单行的情况)。但是lambda表达式仍然有以下两个用途:

  对于单行函数,使用lambda表达式可以省去定义函数的过程,使代码更加简洁。

  对于不需要多次重用的函数,lambda表达式用完之后可以立即释放,提高了性能。

  下面的代码演示了通过lambda表达式调用Python的内置map()函数:

  #传入一个lambda表达式,该表达式将平方作为参数进行计算

  x=map(x : x * x,range(8))

  print([eforeinx])#[0,1,4,9,16,25,36,49]

  #传入一个lambda表达式,该表达式将平方作为参数进行计算

  y=map(lambda x : x * xifx % 2==0 else 0,range(8))

  Print ([eforeiny]) # [0,0,4,0,16,0,36,0]从上面的代码可以看出,内置map()函数的第一个参数需要传入函数中。这里传入了函数的简化形式:lambda表达式,使得程序更简洁,性能更好。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: