迭代器
1.常用内置函数
1.map()映射
1 l = [1,2,3,4] 2 map(lambda x:x+1,l)
循环获取列表中每个元素并传递给匿名函数保存返回值
2.zip()拉链
1 l = [11, 22, 33, 44, 55, 66, 77] 2 name_list = ['jason', 'kevin', 'tony', 'jerry'] 3 l1 = [1, 2, 3, 4, 5, 6, 7] 4 l2 = [8, 7, 6, 4, 3, 2, 1] 5 # new_list = [] 6 # for i in range(len(l)): 7 # new_list.append((l[i],name_list[i])) 8 # print(new_list) 9 res = zip(l, name_list, l1, l2) 10 print(list(res))
把一个数据和另一个数据合并在一起
3.max与min max求最大值 min求最小值
1 # l = [11, 22, 33, 44, 55, 66, 77] 2 # print(max(l)) 3 # print(min(l)) 4 5 d = { 6 'jason':3000, 7 'Bevin':1000000, 8 'Ascar':10000000000, 9 'aerry':88888 10 } 11 # def index(key): 12 # return d[key] 13 # print(max(d,key=lambda key:d[key])) # for循环先取值 之后再比较大小 14 """ 15 A-Z 65-90 16 a-z 97-122 17 """ 18 # print(min(d,key=lambda key:d[key])) # jason
4.filter 过滤
1 l = [11, 22, 33, 44, 55] 2 res = filter(lambda x: x > 30, l) 3 print(list(res)) # [33, 44, 55]
5.reduce 归总
1 from functools import reduce 2 d = [11, 22, 33, 44, 55, 66, 77, 88, 99] 3 res = reduce(lambda x, y: x + y, d) 4 res1 = reduce(lambda x, y: x + y, d, 100) # 还可以额外添加元素值 5 print(res)
1 # n = 1 2 # while True: 3 # n+=1 4 # print(n) 5 6 # l = [11,22,33,44,55,66] 7 # n = 0 8 # while n < len(l): 9 # print(l[n]) 10 # n += 1 11 12 i = 12 # 没有 13 f = 11.11 # 没有 14 s = 'jason' # 有 15 l = [111,22,33,4] # 有 16 d = {'username':'jason','pwd':123} # 有 17 t = (11,22,33) # 有 18 se = {11,22,33} # 有 19 b = True # 没有 20 # file = open(r'a.txt','w',encoding='utf8') 21 """ 22 含有__iter__的有 23 字符串 列表 字典 元组 集合 文件对象 24 上述通常为可迭代对象 25 """ 26 print(d) 27 print(d.__iter__()) # 等价于调用了一个内置方法 d.get() 28 print(iter(d)) 29 print(d.__len__()) 30 print(len(d)) 31 """ 32 可迭代对象调用__iter__方法会变成迭代器对象(老母猪) 33 34 __iter__方法在调用的时候还有一个简便的写法iter() 35 一般情况下所有的双下方法都会有一个与之对应的简化版本 方法名() 36 """
迭代器对象
1.迭代器对象
即含有__iner__方法 又含有__next__方法
2.如何生成迭代器对象
让可迭代对象执行__iter__方法还是迭代器本身
迭代器给我们提供了不依赖于索引取值的方式
1 i = 12 # 没有 2 f = 11.11 # 没有 3 s = 'jason' # 有 4 l = [111,222,333,444] # 有 5 d = {'username':'jason','pwd':123} # 有 6 t = (11,22,33) # 有 7 se = {11,22,33} # 有 8 b = True # 没有 9 file = open(r'a.txt','w',encoding='utf8') 10 11 # res = s.__iter__() # 转成迭代器对象 12 # print(res.__next__()) # 迭代器对象执行__next__方法其实就是在迭代取值(for循环) 13 # print(res.__next__()) 14 # print(res.__next__()) 15 # print(res.__next__()) 16 # print(res.__next__()) 17 18 19 # res = d.__iter__() # 转成迭代器对象 20 # print(res.__next__()) # 迭代器对象执行__next__方法其实就是在迭代取值(for循环) 21 # print(res.__next__()) 22 # print(res.__next__()) # 取完元素之后再取会"报错" 23 24 # 易错 25 # print(d.__iter__().__next__()) # username 26 # print(d.__iter__().__next__()) # username 27 # print(d.__iter__().__next__()) # username 28 # print(d.__iter__().__next__()) # username 29 # print(d.__iter__().__next__()) # username 30 # print(d.__iter__().__next__()) # username
for循环的本质
1 l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55] 2 # 循环打印出列表中每个元素 但是不能使用for循环 __next__() next() 3 # 1.先将列表转为迭代器对象 4 # res = l1.__iter__() 5 # # 2.循环执行__next__取值 6 # while True: 7 # print(res.__next__()) 8 9 # for i in l1: 10 # print(i)
1.for循环内部原理
1.1将关键字in后面的数据先调用__iter__方法转为迭代器对象
1.2循环执行__nex__方法
1.3取完之后__next__
1.将关键字in后面的数据先调用__iter__方法转为迭代器对象处理
res = 数据.__iter__()
while True:
检测代码是否会报错
res.__next__()
如果报错了则自动处理掉并结束while循环
异常
出错会导致异常 异常发生后如果没有解决方案则会到底整个程序结束
1 1.traceback 2 翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行 3 2.XXXError 4 错误的类型 5 3.错误类型冒号后面的内容 6 错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)
1 # print(idna) # NameError 2 # l = [11,22,33] 3 # print(l[100]) # IndexError 4 # d = {'username':'jason'} 5 # print(d['xxx']) # KeyError 6 # int('abc') # ValueError
4.基本语法
1 try: 2 有可能会出错的代码 3 except 错误类型 as e: 4 出错之后对应的处理机制(e是错误的详细信息) 5 except 错误类型 as e: 6 出错之后对应的处理机制(e是错误的详细信息) 7 except 错误类型 as e: 8 出错之后对应的处理机制(e是错误的详细信息)
1 # try: 2 # int('abc') 3 # except NameError as e: 4 # print('变量名name不存在',e) 5 # except ValueError: 6 # print('值不是纯数字')
5.万能异常
1 try: 2 # int('abc') 3 print(name) 4 # l = [11] 5 # l[100] 6 except Exception: 7 print('你来啥都行 无所谓')
6.异常捕获句式和万能异常
1.有可能会出现错误的代码才需要被检测
2.被检测的代码一定要越少越好
3.异常捕获使用频率越低越好