欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

python lambda函数

一. lambda函数介绍

 

python中,lambda函数也叫做匿名函数,及即没有具体名称的函数,它允许快速定义单行函数。
lambda与def的区别:
1.def创建的方法是有名称的,而lambda没有。
2.lambda会返回一个函数对象,但这个对象不会赋予一个标识符,而def则会把函数对象赋值给一个变量(函数名)。
3.lambda只是一个表达式,而def则是一个语句。
4.lamdba表达式“:”后面只能跟一个表达式,def则可以有多个。
5.像if或for或print等语句不能用于lambda中,def可以。
6.lambda一般用来定义简单的函数,而def可以定义复杂的函数。
7.lambda函数不能共享给别的程序调用,def可以

 

语法:
    lambda [arg1, [, arg2,……argn]] : expression

先看个简单的lambda函数

>>> lambda x,y: x+y
<function <lambda> at 0x101d22ea0>

#x,y是函数的两个参数,x+y是函数的返回值,一看就知道是求两个数的和,但是函数没有名称如何调用呢?这里我们暂且给函数定义一个函数名,这样调用匿名函数就成为可能

>>> add = lambda x,y: x+y
>>> add(1,2)
3

它等同与常规函数:

>>> add
<function add at 0x101d22ea0>
>>> add(1,2)
3

但是如果定义匿名函数,还给它一个名字的话,这就毫无意义了,所以这样并不是lambda的使用场景。

二. lambda使用场景

1. 函数式编程

map,filter,reduce这几个内置函数都接收函数作为参数,lambda就可以配合这些函数用于函数式编程中。

lst = [1,2,3,4,5,6,7,8,9,10]

print(list(map(lambda x:x*10, lst)))

运行结果:

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

2.闭包

先看一个普通的闭包

def outer(x):
    def inner(y):
        return x+y
    return inner

a = outer(5)
b = a(5)
print(b)

使用lambda的闭包

def outer(x):
    return lambda y:x+y

a = outer(5)
b = a(5)
print(b)

两种形式得到的结果是一样的,所以lambda函数是在我们编程过程中,可以使代码看起来更简洁,部分只需要执行一次的函数就可以考虑定义为lambda,我们使用lambda旨在于是代码更简洁,

如果你写出了让人难以一眼看清逻辑的lambda函数,那你就要考虑用常规的方式来定义函数了。

 

posted on 2018-08-12 19:28  Louiszj  阅读(124)  评论(0编辑  收藏  举报

导航