Atopos

导航

可迭代对象与迭代器对象And for 循环原理

可迭代对象与迭代器对象And for 循环原理

image

1.可迭代对象

1.1迭代含义
迭代即更新换代 每次的更新都必须依赖于上一次的结果
1.2可迭代对象
内置有__iter__方法的都称之为可迭代对象
含有__iter__的有
字符串(str) 列表(list) 字典(dict) 元组(tuple) 集合(set) 文件对象(file)

image

1.3示例

d = {'username':'jason','pwd':123}
print(d.__iter__()) # 等于调用了一个内置方法
print(iter(d))
# 当可迭代对象调用了__iter__方法 就变成了迭代器对象
# __iter__方法可以简写为iter()

image

2.迭代器对象

2.1含义
既含有__iter__方法 又有__next__方法

2.2迭代对象的生成
让可迭代对象执行__iter__方法
这里需注意 文件对象本身既是可迭代对象又是迭代器对象 迭代器对象无论执行多少次__iter__方法 还是迭代器对象(本身)
image

2.3示例

list = ['jason','jack','tony']
res = list.__iter__() # 将列表转成可迭代对象
print(res.__next__()) # 可迭代对象执行__next__方法 其实就是在迭代取值(相当与for循环取值)
print(res.__next__()) # 每次执行取一个值
print(res.__next__())

易错
# print(d.__iter__().__next__())  # username
# print(d.__iter__().__next__())  # username
# print(d.__iter__().__next__())  # username
# print(d.__iter__().__next__())  # username
# print(d.__iter__().__next__())  # username
# print(d.__iter__().__next__())  # username

image

3.for循环原理

3.1示例
l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
res = l1.__iter__()
方式1
while True:
    print(res.__next__())
方式2
for i in l1:
    print(i)
3.2for循环内部原理
    1.将关键字in后面的数据先调用__iter__方法转为迭代器对象
    2.循环执行__next__方法
    3.取完之后__next__会报错 但是for循环会自动捕获该错误并处理
3.3for循环本质
eg 
	d = {'name':'jason','pwd':123,'hobby':'read'}
	res = d.__iter__() # 转成迭代器
	while True:
		try:
			print(res.__next__()) # 双下next迭代取值
		except StopIteration as e: # 解决迭代取值完后报错问题
			break
	for i in d: # 循环取完值并自动处理异常
		print(i)

posted on 2021-11-19 17:18  Atopos_q  阅读(10)  评论(0编辑  收藏  举报