匿名函数


# 有名函数:基于函数名重复使用
def func():
print('from func')

func()
func()
func()


# 匿名函数:没有绑定名字的下场是用一次就回收了
def func(x,y): #func=函数的内存地址
return x + y

res=(lambda x,y:x+y)(1,2)
print(res)

f=lambda x,y:x+y # 给匿名函数赋值了,不符合定义
print(f)
print(f(1,2))

重要的一些内置方法
max min map filter sorted
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}

max的工作原理
1 首先将可迭代对象变成迭代器对象
2 res=next(迭代器对象),将res当作参数传给key指定的函数,然后将该函数的返回值当作判断依据
def func(k):
return salaries[k]

print(max(salaries,key=func)) #next(iter_s)
'egon', v1=func('egon')
'alex', v2=func('alex')
'wupeiqi', v3=func('wupeiqi')
'yuanhao', v4=func('yuanhao')



salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
print(max(salaries,key=lambda k:salaries[k])) #next(iter_s) # 返回的还是字典的key,这点是不变的
print(min(salaries,key=lambda k:salaries[k])) #next(iter_s)


l=[10,1,3,-9,22]
# l.sort() # 改变l的排序
# print(l)
sorted(l) # 不会改变原来l的排序
print(l)
l1=sorted(l,reverse=False) # 用sorted只能把排序赋值给新的变量,才能看出变化。可以看成是临时改变,
print(l1)

l2=sorted(l,reverse=True)
print(l2)

salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
#
print(lambda k:salaries[k])
res = lambda k:salaries[k]

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

names=['张明言','刘华强','苍井空','alex']

map的工作原理
1 首先将可迭代对象变成迭代器对象
2 res=next(可迭代器对象),将res当作参数传给第一个参数指定的函数,然后将该函数的返回值当作map的结果之一
aaa=map(lambda x:x+"_SB",names)
print(aaa)
print(list(aaa))

print([name+"_SB" for name in names])

filter的工作原理
filter 过滤函数 符合条件的留下来
1 首先将可迭代对象变成迭代器对象
2 res=next(可迭代器对象),将res当作参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下res
names=['alexSB','egon','wxxSB','OLDBOYSB']

print([name for name in names if name.endswith('SB')])

aaa=filter(lambda x:x.endswith('SB'),names)
print(aaa)
print(list(aaa))





posted @ 2018-06-14 16:37  Roc_Atlantis  阅读(130)  评论(0编辑  收藏  举报