迭代器

可迭代对象

# 迭代
	迭代即更新换代的意思,每次更新都必须依赖于上一次的结果
""" 提供了一种不依赖索引取值的方式 """
# 可迭代对象
	内置有__iter__都可称为可迭代对象
"""
针对双下划线开头,双下划下标结尾的方法
最为专业的读法为双下方法名 eg:双下iter
"""
"""
最常见的含有__iter__的有:
字符串、列表、字典、元组、集合、文件对象
"""
d = ['jaosn', 'tony', 'jerry']
print(d.__iter__())
print(d.__len__())
print(iter(d))
print(len(d))
"""
可迭代对象调用__iter__,就变成了迭代器对象(老母猪)

__iter__可以简写为iter()
一般双下法都有一个对应的简化版本 方法名()
"""

image

迭代器对象

"""
迭代器对象:
	即含有__iter__还含有__next__方法
如何生成迭代器对象:
	在使用__iter__后即为迭代器对象
文件对象本身即是可迭代对象又是迭代器对象
迭代器对象无论使用多少次的__iter__后都为迭代器对象

迭代器对象给我们提供了不依赖与索引取值的方式
"""
d = ['jaosn', 'tony', 'jerry']
res = d.__iter()
print(res.__next__())  
# 迭代器对象执行__next__方法其实就是在迭代取值(for循环)

image

for循环的本质

l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
# 循环打印出列表中每个元素 但是不能使用for循环  __next__()  next()
# 1.先将列表转为迭代器对象
res = l1.__iter__()
# 2.循环执行__next__取值
while True:
    print(res.__next__())

for i in l1:
    print(i)

"""
for循环内部原理
    1.将关键字in后面的数据先调用__iter__方法转为迭代器对象
    2.循环执行__next__方法
    3.取完之后__next__会报错 但是for循环会自动捕获该错误并处理

res = 数据.__iter__()
while True:
    检测代码是否会报错
    res.__next__()
    如果报错了则自动处理掉并结束while循环
"""
### for循环本质

```python
d = {'name':'jason','pwd':123,'hobby':'read'}

res = d.__iter__()  # StopIteration
while True:
    try:
        print(res.__next__())
    except StopIteration as e:
        break

image

异常捕获

# 什么是异常??
	指的是代码运行出错会导致异常 异常发生后如果没有解决方案则会导致整个程序结束。
# 异常的三个重要组成部分
1.traceback
	在报错内容最底下,点击往上数的第一个蓝色字体,即可跳转到有误的代码处。
2.XXXError
	错误的类型
3.错误类型冒号后的内容
	错误的详细原因(很重要,看完之后可能找到解决办法)
   
# 错误的种类
1.语法错误
	不被允许的错误,出现立刻修改!
2.逻辑错误
	可以被允许的,出现后修改即可
 """ 修改逻辑错误的过程其实就是在重头到尾理清思路的过程 """

 print(name)  # NameError
 l = [11,22,33]
 print(l[100])  # IndexError
 d = {'username':'jason'}
 print(d['xxx'])  # KeyError
 int('abc')  # ValueError
    
"""
基本语法结构
    try:
        有可能会出错的代码
    except 错误类型 as e:
        出错之后对应的处理机制(e是错误的详细信息)
    except 错误类型 as e:
        出错之后对应的处理机制(e是错误的详细信息)
    except 错误类型 as e:
        出错之后对应的处理机制(e是错误的详细信息)
"""

# 怎么修改
try:
    int(abc)
except ValueError:
    print('值不是纯数字')
# 使用后在整数中写其他数据,都不会报错,只会提示

" 万能异常 "
try:
    '输入想要不报错的数据'
except Exception:
    print('内容有误')
    
异常捕获句式和万能异常:
	1.有可能出现错误的代码才需要监测
	2.有监测的代码越少越好
	3.异常捕获使用的频率越低越好
	
try:
    被监测的代码
except 错误类型 as e:
    ...
else:
    被监测的代码不报错的时候执行
finally:
    无论是否报错最终都会执行
    
# 断言(了解)
name = 'jason'
assert isinstance(name,str)

# 主动报异常
raise 错误类型
posted @ 2021-11-19 19:58  代小白菜  阅读(51)  评论(0)    收藏  举报