一、匿名函数
没有名字的函数
1.匿名函数的语法
1)lambda 形参列表:返回值
2)函数名 = lambda 形参列表:返回值
2.匿名函数的应用
给实参高阶函数传参
二、实参高阶函数
如果一个函数有一个参数就函数,那么这个函数就是实参高阶函数
函数对应的传参方式:1.传普通函数的函数名 2.传匿名函数
函数对应的要求:1. x是函数 2.这个函数可以接收参数 3. 这个函数的返回值必须是数字
常用的几个实参高阶函数
1. max
max(序列) - 求序列中最大元素(直接比较每个元素本身的大小)
max(序列,key = 函数) - 按照函数指定的规则比较序列中元素本身的大小的最大值
函数要求:a.有且只有一个参数:这个参数会指向序列中的每个元素
b.需要一个返回值:返回值就是比较对象(将参数看成序列中的元素,在返回值这个位置来描述比较的对象)
nums = [23,18,28,29,36,45]
print(max(nums,key=lambda nums:(int(nums)%10)+(int(nums) // 10)))#29
print(min(nums,key=lambda nums:nums**2))#18
2. map
map(函数,序列)
函数要求:a.有且只有一个参数,参数指向后面序列中的元素
b.有一个返回值,返回值就是新序列中的元素
map(函数,序列1,序列2…序列N.)
函数要求:a.有且只有N个参数
b.有一个返回值,返回值就是新序列中的元素
如果有多个序列,要求每个序列中的元素相等
nums = [19, 67, 28, 100, 23]
lists = map(lambda nums:nums%10+nums//10,nums)
print(list(lists))#[10, 13, 10, 10, 5]
3. reduce
reduce(函数,序列,初始值)
初始值 - 根据合并方式,初始值一般是0(数字求和)、1(数值求乘积)、空串’'(字符串拼接)
函数:a.有且只有两个参数,第一个参数指向初始值。第二个参数指向序列中的额每个元素
b.有一个返回值。用来描述合并方式
nums = [100, 200, 100, 300, 400]
rasult = reduce(lambda x,item:x*item,nums,1)
print(rasult)#240000000000
三、迭代器和生成器
1.迭代器(iter)
1)迭代器是容器
特点:a.打印迭代器看不到元素
b.无法统计元素个数
c.获取元素的时候只能从前往后按顺序一个一个的取,并且取出一个迭代器内就少一个(不支持增删改)
2)创建迭代器
a.通过类型转换将其他容器转换成迭代器
b.创建一个生成器
3)获取元素
a.获取单个元素:next(迭代器)
b.遍历
注:无论以任何方式得到了迭代器的元素,被得到的元素一定会从迭代器中消失
2.生成器
生成器是容器
生成器作为容器保存的不是多个数据,而且产生多个数据的算法
a.创建生成器 - 调用带有yield关键字的函数,就可以得到生成器
b.控制生成器中元素的个数 - 生成器能创建多少个数据以及能创建哪些数据,就看执行生成器对应的函数的函数体时,会遇到几次yield,每次遇到yield的时候对应的值是多少
c.获取生成器中的元素和迭代器一样