Day13-函数应用和模块
1.匿名函数
-
匿名函数的定义-------匿名函数的本质还是,除了定义的语法结构和普通函数不一样,其他都一样
lambda 形参列表:返回值
相当于:
def 函数名(形参列表):
return 返回值# 练习:写一个匿名函数,可以获取任意一个整数的十位数 result= lambda num: num // 10 % 10 print(result(1823))
-
匿名函数的运用
给实参高阶函数传参的时候,函数对应的参数优先考虑使用匿名函数
函数对应的参数的传参方式:1. 传普通函数的函数名 2.传匿名函数
2.常用的实参高阶函数
-
1.max,min,sorted(sort)
-
语法说明
max(序列, key=函数) - 按照函数制定的规则比较序列中的元素求出最大值
函数的要求:a.有且只有一个参数;这个参数指向序列中每个元素
b.需要一个返回值;返回值就是比较对象(将参数看出序列中的元素,在返回值这个位置来描述比较的值和元素之间的关系) -
案例
# 练习1:求nums中绝对值最小的元素 nums = [-23, 100, 89, -56, -234, 123] print(min(nums, key=lambda item: item**2))
-
-
2.map函数-------基于原序列中的元素,通过指定的规则创建一个新的序列
-
语法说明
map(函数, 序列1, 序列2, 序列3, … 序列N)
函数的要求:a.有且只有一个参数,参数就指向后面这个序列中元素
b.有一个返回值;返回值就是新序列中的元素 -
案例
# 案例1:提取nums中所有元素的个位数: [9, 7, 8, 0, 3] nums = [19, 67, 28, 100, 23] result = list(map(lambda item: item % 10, nums)) print(result) # 案例4: nums = [100, 200, 100, 300, 400] rates = [0.1, 0.3, 0.25, 0.2, 0.3] # [10, 60, 25, 60, 120] result = list(map(lambda i1, i2: i1 * i2, nums, rates)) print(result)
-
-
2.reduce函数----------------将序列中的元素通过指定的规则合并成一个数据
-
语法
reduce(函数, 序列, 初始值)
初始值:根据合并方式,初始值一般是0(数值求和)、1(数值求乘积)或者空串(字符串拼接)
函数:a. 有且只有两个参数;第一个参数指向初始值,第二个参数指向序列中的每个元素
b. 有一个返回值;用来描述合并方式 -
案例
from functools import reduce # 案例1: 求nums中所有元素的和: 0 + 19 + 67 + 28 + 100 + 23 nums = [19, 67, 28, 100, 23] result = reduce(lambda x, item: x + item, nums, 0) print(result)
-
3.迭代器(iter)
-
1.什么是迭代器
迭代器是容器;
特点:a.打印看不到元素
b.无法统计元素个数
c.获取元素的时候只能从上往下(从前往后)按顺序一个一个的取,并且取一个就少一个 -
2.创建迭代器
1.通过类型转换将其他容器转换成迭代器
2.创建一个生成器
-
3.获取元素
-
获取单个元素
next(iter)
-
遍历
-
4.生成器
-
1.什么是生成器
生成器是容器;生成器作为容器保存不是多个数据,而是产生多个数据的算法。
-
2.怎么创建生成器
生成器能创建多少个数据以及能创建哪些数据,就看执行生成器对应的函数的函数体的时候,
会遇到几次yield,每次遇到yield的时候对应的值是多少def func2(): yield 100 yield 200 yield 300 for x in range(3): yield x*1000 gen2 = func2() # print(list(gen2)) #[100,200,300,0,1000,2000]
-
3.怎么控制生成器中元素的个数和值
生成器能创建多少个数据以及能创建哪些数据,就看执行生成器对应的函数的函数体的时候,
会遇到几次yield,每次遇到yield的时候对应的值是多少 -
4.怎么获取生成器中的元素
和迭代器获取元素的方式一样