四、Python之匿名函数 lambda

匿名函数:就是不用定义函数,便可直接调用。当我们在传入函数时,有些时候,不需要显示的定义函数,直接传入匿名函数更方便。

1. 比较以下2种函数定义及调用方式的不同

1) 有名函数

def func(x,y,z=1):
    return x+y+z
print(func(1, 2))       #4=1+2+1    这里z已经默认赋值了,也可以重新定义如下
print(func(1,2,z=3))    #6=1+2+3    默认形参和位置形参可以混用,但是默认参数必须放在位置形成后面

2) 匿名函数

print((lambda x, y, z=1 : x + y + z)(1,2))  #4  与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非给这个表达式重新赋予变量名

res = (lambda x, y, z=1 : x + y + z)(1,2)
print(res)                                  #4    将函数返回结果赋给一个变量,可永久保存

func = lambda x, y, z=1: x + y + z    #赋给一个函数名,已经是有名函数,可多次调用但一般不会这么用
print(func(1, 2, 3))                  #6
print(func(1,1,1))                    #3  可以再次调用

2.与lambda一起使用的函数(max,min,sorted,map,reduce,filter)

1) max 和 lambda

salaries={
    'ee':3000,
    'aa':100000000,
    'ww':10000,
    'yy':2000
}
g = zip(salaries.values(),salaries.keys())
print(list(g))
print(max(g))

#method2
def func(k):
    return(salaries[k])
    print(max(salaries,key=func))

print(max(salaries,key= lambda k:salaries[k]))

2) sorted 和lambda

print(sorted(salaries,key= lambda k:salaries[k],reverse=True))

3) map 和 lambda

names = ['aa','ww','yy']
l=[name + '_sb' for name in names]
print(l)

g = map(lambda name:'%s_Sb' %name,names) #生成器

4) filter 和 lambda

g = filter(lambda x:x.endswith('x'),names)
print(next(g))
print(list(g))

5) reduce 和 lambda

from functools import reduce
res = reduce(lambda x,y:x+y,range(1,100))       #不设置默认初始值是0
res1 = reduce(lambda x,y:x+y,range(1,100),100)  #初始值是100
print(res,res1)
posted @ 2017-12-27 23:33  丢失固执  阅读(308)  评论(0编辑  收藏  举报