匿名函数定义
在Python,有两种函数,一种是def定义,一种是lambda函数
假如要求两个数之和,用普通函数或匿名函数如下:
运用普通函数:
def func(x):
return x>3 a=filter(func,[1,2,3,4,5]) print(a) #利用filter函数得到的是一个迭代器 for i in a: print(i)
得到结果: <filter object at 0x0000000002704358> 4 5
匿名函数:
# a=filter(lambda x:x>3,[1,2,3,4,5]) # print(a) # for i in a: # print(i)
得到结果:
<filter object at 0x0000000002704358>
4
5
上面的例子中:
x 为lambda函数的一个参数
: 分割符
x>3 则是返回值,在lambda函数中不能有return,其实:后面就是返回值
#def func(x): # return x
#func()
等价于下面:
lambda x:x>3
为什么要用匿名函数?
1. 程序一次行使用,所以不需要定义函数名,节省内存中变量定义空间
2. 如果想让程序更加简洁时。一般应用于函数式编程
匿名函数的参数
不带参数匿名函数
>>> >>> t = lambda : True #分号前无任何参数
>>> t()
True
带参数匿名函数 >>> lambda x: x**3 #一个参数
>>> lambda x,y,z:x+y+z #多个参数 >>> lambda x,y=3: x*y #允许参数存在默认值
匿名参数的运用
可以和内置函数 min、 max、 filter、 map 、sorted 配合使用
# def func(x):
# return x>10
# res = filter(func,[5,8,11,9,15]) # for i in res: # print(i)
等价于
# res = filter(lambda x:x>10,[5,8,11,9,15])
# for i in res:
# print(i)
11
15
#def func(x)
# return x**2
#func()
等价于
# ret = map(lambda x:x**2,[-1,2,-3,4])
# for i in ret:
# print(i)
1
4
9
16
dic={'k1':10,'k2':100,'k3':30} def func(key): return dic[key] print(max(dic,key=func)) #根据返回值判断最大值,返回值最大的那个参数是结果 print(max(dic,key=lambda key:dic[key]))
k2
可以和三元运算搭配使用
>>> (lambda x,y: x if x> y else y)(101,102) #直接后面传递实参 102
判断字符串是否以某个字母开头
>>> print (lambda x: x.startswith('B'))('Bob') True
嵌套使用
#lambda嵌套到普通函数中,lambda函数本身做为return的值 ------ >>> def k(n): ... return lambda x: x+n ... >>> f=k(4) >>> f(2) 6
现有两元组(('a'),('b')),(('c'),('d')),
请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
# ret = zip((('a'),('b')),(('c'),('d'))) 利用zip()可以得到<zip object at 0x0000000001EB3948> # res = map(lambda i:{i[0]:i[1]},ret) # print(list(res))
[{'a':'c'},{'b':'d'}]