迭代器

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.迭代

迭代即更新换代,每一次更新都必须依赖于上一次的结果

迭代其实给我们提供了一种不依赖索引取值的方式

2.可迭代对象

内置有__iter__方法的都称呼为可迭代对象

内置的意思是可以通过点的方式直接查看到的

针对双下划线开头是双下划线结尾的方法最为专业标准的读法为双下方法名

面向对象的时候为了隐藏变量区分开

 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.什么事异常

代码运行

出错会导致异常 异常发生后如果没有解决方案则会到底整个程序结束

2、异常三个重要组成部分

1 1.traceback
2         翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行
3 2.XXXError
4         错误的类型
5 3.错误类型冒号后面的内容
6         错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)

3.错误的种类

3.1语法错误

不允许的 出现立即修改

3.2逻辑错误

可以被允许出现后尽快修改即可

修改逻辑错误的过程其实就是在从头到尾理清思路的过程现之后尽快修改

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.异常捕获使用频率越低越好

 

posted @ 2022-01-12 17:37  colagirl  阅读(64)  评论(0)    收藏  举报