1.lambda
lambda 参数1,参数2,参数3,。。。。。:expression
lambda x,y,z:x+y+z
1.1 调用方式
1.1.1 方式一
res = lambda(x,y,z:x+y+z)(1,2,3) 直接赋值,直接得出结果
1.1.2 方式二
func = lambda x,y,z:x+y+z
res = func(1,2,3)
匿名函数与有名函数有相同的作用域,但是匿名函数意味着引用计数为0,使用一次就释放,所以匿名函数用于临时使用一次的场景。
2.内置函数 map min sort
内置max与min都支持迭代器协议,工作原理都是迭代字典,取得是字典的键,因而比较的是键的最大和最小值,而我们想要的是比较值的最大值与最小值
max(sarlaies,key=lambda k:salaries[k])
min(sarlaies,key=lambda k:salaries[k])
同理,我们直接对字典进行排序,默认也是按照字典的键去排序的
sroted(salaries)
迭代对象arrary=[1,2,3,4,5]
- map:可以接收两个参数,一个是函数,另一个是可迭代对象,得到的仍然是迭代器
res = map(lambda x:x**2,arry)
- reduce: 可以接收3个参数,一个是参数,一个是可迭代对象,第三个是初始值
python3中,reduce被集中到模块functools中,需要导入使用
from functools import reduce
res = reduce(lambda x,y:x+y,array)
解析:
1.没有初始值,reduce函数会先迭代一次arrary得到的值作为初始值,作为第一个值数传给x,然后继续迭代一次
arrary,得到的值作为第二个值传给主,运算结果为3
2.将上一次reduce运算的结果作为第一个值传给x,然后迭代一次arrary得到的结果作为第二个值 传给给y,依次
类推,直到迭代完arrary的所有元素,得到最终的结果15
- filter函数会依次迭代,得到的值依次传给匿名函数,如果匿名函数的返回值为真,则过滤出该元素,而filter函数得到的结果仍然是迭代器
对arrary进行过滤操作,过滤出大于3的元素
res = filter(lambda x:x>3,arrary)
list(res) 4,5