高阶函数
- 实参是一个函数名
- 函数的返回值是一个函数
print(abs(-10))f = absprint(f(-10))#传递的参数包含函数名。def myfun(x,y,fun): return f(x),f(y)print(myfun(-10,23,abs))1010(10, 23)
python内置高阶函数
map()函数
map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 list 返回。
#随机生成一个长度为10,元素在2~7之间的列表#对列表里所有元素求阶乘import randomlee= [random.randint(2,7) for i in range(10)]print(lee)def mult(x): rs=1 for i in range(1,x+1): rs=i*rs return rsprint(map(mult,lee))print(list(map(mult,lee)))[2, 6, 5, 3, 3, 3, 3, 5, 4, 6]
reduce()函数
把当前输出作为下一次运算的输入
- python2中为内置函数
- python3需要导入,from functools import reduce
#求10的阶乘from functools import reducedef multi(x, y): return x * y# [1,2,3] ---> multi(multi(1,2),3)c = reduce(multi, range(1, 11))print(c)
filter()函数
filter() 也接收一个函数和一个序列。和 map() 不同的时,filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True还是 False 决定保留还是丢弃该元素。
#求0~10之间的奇数def isodd(x): return x % 2 != 0# [i for i in range(100,111) if i %2 !=0]d = filter(isodd, range(0, 11))print(d)print(list(d))[1, 3, 5, 7, 9]
匿名函数
-
匿名函数定义规则
lambda 形参:返回值
from functools import reduceprint(reduce(lambda x,y:x+y,[1,2,3,4,5]))15
列表里嵌套列表进行排序
d = { '001':{ 'name':'apple', 'count':124, 'price':1000 }, '002':{ 'name':"banana", 'count':8, 'price':1024 }}#列表里嵌套元组print(d.items()) #按key值排序print(sorted(d.items(),key=lambda x:x[1]['count']))print(sorted(d.items(),key=lambda x:x[1]['price']))#itemgetter会忽略key值print(sorted(d.values(),key=itemgetter('count')))print(sorted(d.values(),key=itemgetter('price')))dict_items([('001', {'name': 'apple', 'count': 124, 'price': 1000}), ('002', {'name': 'banana', 'count': 8, 'price': 1024})])[('002', {'name': 'banana', 'count': 8, 'price': 1024}), ('001', {'name': 'apple', 'count': 124, 'price': 1000})][('001', {'name': 'apple', 'count': 124, 'price': 1000}), ('002', {'name': 'banana', 'count': 8, 'price': 1024})][{'name': 'banana', 'count': 8, 'price': 1024}, {'name': 'apple', 'count': 124, 'price': 1000}][{'name': 'apple', 'count': 124, 'price': 1000}, {'name': 'banana', 'count': 8, 'price': 1024}]