2018.10.10python学习第十六天part1

匿名函数

1.什么是匿名函数?(what)

没有函数名的函数

对比有名函数:区别是有函数名,可以被重复多少次使用

特点:只能在定义的时候使用,且只能使用一次

2.为何要用匿名函数?(why)

因为匿名函数没有函数名,所有在定义完以后就会被python的垃圾回收机制回收,无法重复使用,所以,当某个功能只需要写一次,没有重复的必要的时候,可以用匿名函数的形式,这样可以节省内存空间。 3.如何使用匿名函数?(how)

(lambda x,y:x+y)()

#print(lambda x,y:x+y)得到的是一个函数的内存地址

#x,y是匿名函数的参数,x+y是函数的功能,()是调用这个函数

4.匿名函数和其他函数的配合使用(max min map reduce)

max

eg1.

salaries={
   'egon':5000,
   'alex':10000,
   'aaa':20000
}          
##取出工资最高的人的名字`

#有名函数

def func(k):
return salarier[k]
res=max(salaries,key=func)

#匿名函数

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

max函数指定key后: 1.将可迭代的对象变成迭代器对象 2.迭代出来的值当作key后面的函数的参数传给key后面的函数 3.调用key=后面的函数,将返回值作为比较依据

eg2. nums=[10,-22,11,8] ##比较他们平方的大小

#有名函数

def func(k):
return k**2

print(max(nums,key=func))

#匿名函数

res=max(nums,key=lambda k:k**2)
print(res)

 

min

和max的作用原理类似

map

映射:相当于每个值执行一边map的规则,然后得到相同个数的值

names=['aaa','bbb','ccc'] ##在每个人的名字后面加上’sb‘

#方式1:

new_names=[]
for name in names:
new_names.append(name+'sb')
print(new_names)

#方式二 :三元表达式

naw_names=[name+'sb' for name in names]
print(new_names)

#方式三:map映射

res=map(lambda x:x+'sb',names)
print(res)

 

reduce

减少

#方式一:手动实现

res=0
for i in range(1,101):
res+=i
print(res)

#方式二:三元表达式

res=sum(i for i in range(1,101))
print(res)

#方式三:reduce+匿名函数

from functools import deduce
res=reduce(lambda x,y:x+y,[i for i in range(1,101)])
print(res)

#reduce的工作原理:三个参数 #1.合并规则 #2.可迭代对象 #3.初始值(没有指定初始值是,默认是None)

filter

过滤

#方式一

new_names=[]
names=['aaa_sb','bbb_sb','ccc_sb','ddd']
for name in names:
if name.endwith('sb'):
new_names.append(name)
print(new_names)

#方式二:list生成式

names=['aaa_sb','bbb_sb','ccc_sb','ddd']
new_names=[name for name in names if name.endwith('sb')]
print(new_names)

#方式三:filter+匿名函数

res=filter(lambda name:name.endwith('sb'),names)
print(res)

 

原文地址:https://www.cnblogs.com/hello-yuanjing/p/9767029.html