可迭代对象与迭代器对象

可迭代对象

1. 什么是迭代

迭代即更新换代 每次更新都必须依赖于上一次的结果(与递归差不多)

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

2. 可迭代对象判断方法

内置有__iter__方法的都称之为可迭代对象
	内置方法可通过局点符'.'查看
"""
针对双下滑线开头 双下滑线结尾的方法 最为专业标准的读法为
	双下+方法名
"""    

在这里插入图片描述

3. 可迭代对象有哪些

"""
含有__iter__的有
    字符串 列表 字典 元组 集合 文件对象
上述通常为可迭代对象
"""
d = {'username':'jason','pwd':123}  # 有
print(d)
print(d.__iter__())  # 等价于调用了一个内置方法 d.get()
print(iter(d))
print(d.__len__())
print(len(d))
"""
可迭代对象调用__iter__方法会变成迭代器对象
__iter__方法在调用的时候还有一个简便的写法iter()
    一般情况下所有的双下方法都会有一个与之对应的简化版本 方法名()
"""

迭代器对象

"""
迭代器对象
    即含有__iter__方法 又含有__next__方法
如何生成迭代器对象
    让可迭代对象执行__iter__方法

文件对象本身即是可迭代对象又是迭代器对象
迭代器对象无论执行多少次__iter__方法 还是迭代器对象(本身)

迭代器给我们提供一种了不依赖于索引取值的方式
"""
l = [111,222,333,444]  # 可迭代对象
res = l.__iter__()  # 迭代器对象 也可以用 iter(l)
print(res.__next__())  # 111 迭代取值
print(next(res))  # 222
'迭代器取完值之后再取就会报错'

注意:
print(l.__iter__().__next__())  # 111
print(l.__iter__().__next__())  # 111
print(l.__iter__().__next__())  # 111
'''这里每次都是形成了一个新的迭代器再进行取值的,并不是一个迭代器中取值'''

在这里插入图片描述

for循环的本质

l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
# 循环打印出列表中每个元素 但是不能使用for循环

# 1.先将列表转为迭代器对象
res = l1.__iter__()
# 2.循环执行__next__取值
while True:
    try:
        print(res.__next__())
    except StopIteration as e:
        break
# 虽然取完值之后会报错,但是还是可以将值全部取出来
"""
for循环内部原理
    1.将关键字in后面的数据先调用__iter__方法转为迭代器对象
    2.循环执行__next__方法
    3.取完之后__next__会报错 但是for循环会自动捕获该错误并处理

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

在这里插入图片描述

迭代取值与索引取值对比

'''
迭代取值
	优点:
		1.不依赖于索引的一种通用取值方式
	缺点:
		1.取值的顺序永远都是固定的从左往右
索引取值
	优点:
		1.可以重复取值
	缺点:
		1.需要提供容器类型才可以取值(不是一种通用的取值方式)
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值