高阶函数:
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另
一个函数作为参数,这种函数就称之为高阶函数。
- 实参是一个函数名;
- 函数的返回值是一个函数;
函数本身也可以赋值给变量,即:变量可以指向函数。
print(abs(-10))
f = abs
print(f(-10))
传递的参数包含函数名.
def fun(x,y, f):
return f(x), f(y)
print(fun(-10, 34, abs))
#内置高阶函数
1.map函数
map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依
次作用到序列的每个元素,并把结果作为新的 list 返回。
eg:对于序列求绝对值
print(list(map(abs, [-1, 3, -4, -5])))
print([abs(i) for i in [-1,3,-4,-5]])
2.reduce函数
reduce 把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接
收两个参数,reduce 把结果继续和序列的下一个元素做累积计算。
eg:10!的阶乘
from functools import reduce
def multi(x, y):
return x * y
#[1,2,3] ====> multi(multi(1,2), 3)
print(reduce(multi, range(1, 4)))
3.filter函数
filter() 也接收一个函数和一个序列。和 map() 不同的时,
filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True
还是 False 决定保留还是丢弃该元素。
eg:拿出1~100之间所有的素数
def isPrime(num):
for i in range(2, num):
if num % i == 0:
return False
else:
return True
print(list(filter(isPrime, range(2, 101))))
4.sorted函数
可以对数据类型进行排序
1. li.sort()和sorted()两种方法的区别?
1). 列表里面提供了sort方法, 其他数据结构没有.sorted方法可以对任何可迭代对象排序.
2).sort方法支持原地排序(变量排序后, 变量本身改变), sorted排序后返回一个新的列表,并不改变原变量的内容.
2.默认sort和sorted方法由小到大进行排序, reverse=True时, 由大到小进行排序.
li = [1, 2, 6, 21324, 67, 2, 23]
print(sorted(li, reverse=True))
print(li)
li.sort(reverse=True)
print(li)
3. 对于列表里面嵌套列表进行排序.
info = [
# 商品名称 商品数量 商品价格
(‘apple3’, 200, 32),
(‘apple4’, 40, 12),
(‘apple1’, 40, 2),
(‘apple2’, 1000, 23),
]
print(sorted(info))
def sorted_by_count(x): # x = (‘apple3’, 200, 32)
return x[1]
def sorted_by_price(x):
return x[2]
def sorted_by_count_price(x):
return x[1], x[2]
print(sorted(info, key=sorted_by_count)) # 按照商品的数量进行排序, key代表排序的关键字
print(sorted(info, key=sorted_by_price)) # 按照商品的价格进行排序, key代表排序的关键字
print(sorted(info, key=sorted_by_count_price)) # 先按照商品数量由小到大进行排序, 如果商品数量一致, 则按照商品价格由小到大进行排序.
4. 对于字典里面嵌套字典进行排序
d = {
‘003’:{
‘name’:‘apple1’,
‘count’:100,
‘price’:10
},
‘002’: {
‘name’: ‘apple1’,
‘count’: 200,
‘price’: 2
},
}
print(d.items())
print(sorted(d.items(), key=lambda x: x[1][‘count’])) #lambda 是匿名函数
print(sorted(d.items(), key=lambda x: x[1][‘price’]))
匿名函数
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数
匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。
因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对
象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;
也可以把匿名函数作为返回值返回