迭代器与常用内置函数
一、迭代器
1.可迭代对象
对象内置方法上可以有__iter__的数据类型我们都可以称之为可迭代对象,例如字符串str、列表list、字典dict、元组tuple、集合set和文件都是可迭代对象
2.迭代器对象
对象内置方法中既可以使用__iter__又可以使用__next__可以称为迭代器对象,只有文件本身就是迭代器对象,迭代器对象执行__iter__后还是迭代器对象,执行
__next__后会从迭代器中的下一个值
迭代器是一种可以不依赖于索引,可以迭代取值的方法,只要迭代器中还有值就可以一直取下去,没有值了就会报错

二、for循环原理
1.for循环会将 in 后面的数据先调用__iter__转换为迭代器对象
2.将迭代器对象执行__next__,取出迭代器中的值
3.迭代器中没有值后,自动捕获该错误并处理
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55]
res = l1.__iter__()
while True:
try:
res1 = res.__next__()
print(res1)
except Exception:
break

迭代取值与索引取值的对比
迭代取值:
优点:不依赖于索引的一种通用的取值方式
缺点:取值的顺序永远是固定的从左往右,无法重复取值
索引取值:
优点:可以重复取值
缺点:只能让有序容器类型使用索引取值(不是一种通用的方式)
三、异常捕获
什么是异常:
代码运行过程中错误就会出现异常,如果没有处理该异常,代码的运行就会终止。
异常的种类:
1.语法错误
这种错误是不被允许的,这种错误应该在程序运行前就发现并改正。
2.逻辑错误
这种错误是可以允许的,出现后立即改正即可。
异常的处理方式
指名道姓的解决异常方式:
try:
被检测的代码块
except NameError:
触发NameError时对应的处理逻辑
except IndexError:
触发IndexError时对应的处理逻辑
except KeyError:
触发KeyError时对应的处理逻辑
万能异常处理方式
try:
被检测的代码块
except Exception:
应对所有逻辑错误时对应的处理逻辑
ps:有可能出现错误的代码才需要被监测,异常不用的使用频率越低越好
异常捕获补充:
try:
被监测的代码
except 错误类型 as e:
...
else:
被监测的代码不报错的时候执行
finally:
无论是否报错最终都会执行
# 断言(了解) 判断类型是否正确
name = 'jason'
assert isinstance(name,str)
# 主动报异常 例如CPU80度报一次异常,100度再报真正的异常
raise 错误类型
四、内置函数
1.map()映射
括号内可以填两个元素,第一个元素填函数,第二个元素填若干列表,函数参数有几个就填几个列表
循环获取列表中的每个元素并传递给函数后保存返回值
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55] print(list(map(lambda x: x + 1, l1)))

2. zip()拉链
函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后保存该值。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
l = [11, 22, 33, 44, 55, 66, 77] name_list = ['jason', 'kevin', 'tony', 'jerry'] l1 = [1, 2, 3, 4, 5, 6, 7] l2 = [8, 7, 6, 4, 3, 2, 1] res = zip(l, name_list, l1, l2) print(list(res))

3.max()min()
该函数就是用来找括号中传入可迭代对象中的最大值与最小值
l = [11, 22, 33, 44, 55, 66, 77] print(max(l)) print(min(l))

4.filter()过滤
括号内填两个参数,第一个参数填函数,第二个参数填可迭代对象,将可迭代对象的中的元素放入函数中进行判断,将True的元素返回成值并保存
l = [11, 22, 33, 44, 55, 66, 77] res = filter(lambda x: x > 20, l) print(list(res))

5.reduce()归总
在python3.x中想要使用reduce函数,必须先调用模块 from functools import reduce
该内置函数有三个参数
- function -- 函数,有两个参数
- iterable -- 可迭代对象
- initializer -- 可选,初始参数 # 填写多少就在返回的结果上加上多少
- 该函数的返回值是返回函数计算结果
from functools import reduce
l = [11, 22, 33, 44, 55, 66, 77] res = reduce(lambda x, y: x + y, l, 100) print(res)


浙公网安备 33010602011771号