------------(高阶函数)
把函数当成参数进行传递的函数。
1.sorted(iterable,key,reverse) //其中的key是一个函数参数。
sorted(list1,key = 函数) ------>通过key这个函数指定规则
dict1 = {'zhangsan':90,'lisi':100,'wangwu':70}
对dict1按分数排序
sorted(dict1) ------> 此时按建排序
result = sorted(dict1.items(),key = lambda x:x[1])
result ----->是一个列表,里面嵌套元组。
dict(result) ------->强转为字典
2.map(function,*iterable) ----映射(函数,可迭代的对象)
给一个可迭代的对象,通过function的作用,将其转换成一个新的对象。
map1 = map(lambda x : x ** 2,[1,2,3,4,5]) ---->返回一个map对象。
print(map1) ----->查看结果,必须强转成需求。list(map1)
map0 = map(lambda x : x ** 2,[1,2,3],[4,4,5])
3.filter(function or None ,iterable):
------>返回值是一个filter object
------>需要对返回值进行强转,如:list(filter).......
------>function函数的返回值必须是bool类型。
numbers = [2,3,4,5,5,0,6,6]
filter = filter(None,numbers) ----->返回一个filter对象,返回值必须为真。
filter = filter(lambda x:a%2==0,numbers) ----->返回一个filter对象,返回值必须为真。
list1 = ['hello', 30, '80', 50, 'hi100', '99', 'yes']
filter(lambda x:isinstance(x,int) or x.isdigit(),list1)
4.reduce(function,iterable): 返回一个value
from functools import reduce ------>使用前必须导入包
参数function是函数,此函数的参数必须是两个lambda x,y:x*y
参数iterable是一个可迭代的对象。
reduce(lambda x,y:x*y,range(1,6)) ----->计算阶乘
list = [3,5,6,5,4]
result = reduce(lambda x,y:x+y,list)
5.functools模块:主要是使用三个函数。
from functools import partial,wraps,reduce
@reduce(), @partial()[偏函数], @wraps()
6.partial():偏函数
是通过将一个函数的部分参数预先绑定为某些值,从而得到一个
新的具有较少可变参数的函数。
int1 = partial(int,base=8)
int1('123') ----将'123'传给int变为整数类型,
然后将8进制数转为10进制。
def add(x,y):
return x+y
add1 = partial(add,3) ------> 固定一个值
r = add1(8) --------> 传入一个值
7.wraps():消除装饰器带来的一些副作用。---->名字和文档的不一致性。
装饰器内层函数上加上,@wraps(函数名)
obj.__name__ ----->获取函数名
obj.__doc__ ----->获取文档注释