高阶函数
-实参是一个函数名
-函数的返回值是一个函数
求和函数
绝对值函数
把函数赋值给变量
传递的参数包括函数名
内置高阶函数
1.map函数
map()函数接收两个参数,一个是函数,一个是序列
map将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回
实例1:
对于序列[-1,3,-5,-4]的每个元素求绝对值
print(list(map(abs,[-1,3,-5,-4])))
实例2:
对于序列的每个元素求阶乘(10个元素,都在2~7之间的随机数)
import random
def je(x):
res =1
for i in range(1,x+1):
res*=i
return res
li = [random.randint(2,7)for i in range(10)]
print(li)
print(list(map(je,li)))
实例3:
用户接收一串数字,‘1 3 5 7 8’,将字符串中所有的数字转化为整型
并且以列表的格式输出
s = '1 3 5 7 8'
print(list(map(int,s.split())))
实例4:
2.reduce函数
把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算 reduce(f,[x1,x2,x3,x4,x5] = f(f(f(x1,x2),x3),x4)
3.filter过滤函数
和map()类似,也接收一个函数和一个序列
但fileter()把传入的函数依次作用于每个元素,然后根据返回值
是True还是False来决定保留还是丢弃该元素
过滤出1~100以内的所有偶数
过滤出1~10以内的所有质数
4.sorted函数(排序)
.参数一:必须可迭代对象,[用于比较的序列]
参数二:用于比较函数的时候,比较什么由key来决定[key有默认值]
参数三:reverse = True[降序], reverse = False[升序,默认升序]返回值,返回的一个可迭代对象
实例:
实例:
# (2018-携程-春招题)题目需求:
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
# 输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0
7
0
2
# 输出:
调整后数组的内容;
4
7
2
0
0
匿名函数:
1.关键字lambda表示匿名函数,冒号前面表示函数的参数。
2.匿名函数只能有一个表达式,表达式结果就是函数返回值,不用写return。
3.匿名函数也是一个也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。同样的,也可以把匿名函数作为返回值返回。
4,相对来说,python多匿名函数的支持有限,只支持一些简单的函数。
例一:
lambda *args,**kwargs:(args,kwargs)
例二:
找出1~100之间的偶数
print(list(filter(lambda x:x%2 == 0,range(1,101))))
例三:求5以内数的平方
print(list(map(lambda x:x**2,range(5))))
例四:
移动列表中的0到最后面,其他数字排序不变
nums = [0, 7, 0, 1, 2, 1, 5,1, 7, 8, 0, 67, 1, 3, 4]
nums = [0, 7, 0, 1, 2, 1, 5,1, 7, 8, 0, 67, 1, 3, 4]
print(sorted(nums,key=lambda x:1 if x == 0 else 0))