前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >python - 可迭代/迭代器对象、for循环原理

python - 可迭代/迭代器对象、for循环原理

作者头像
HammerZe
发布2022-03-25 20:01:28
发布2022-03-25 20:01:28
93100
代码可运行
举报
文章被收录于专栏:Hammer随笔Hammer随笔
运行总次数:0
代码可运行

目录

可迭代对象与迭代器对象

  • 迭代:迭代的意思就是更新换代,每次的更新都必须依赖上一次的结果
  • 迭代其实给我们提供了一种不依赖索引取值的方式
  • 可迭代对象: 内置有 _ _ iter _ _方法的都称为可迭代对象 有字符串、列表、元组、字典、集合、文件对象
  • 迭代器对象: 内置有 _ _iter _ _ 方法,又含有 _ _next _ _方法称为迭代器对象
  • 文件本身即是可迭代对象,也是迭代器对象
  • 可迭代对象调用_ _iter _ _方法就会变成迭代器对象
  • 迭代器对象在执行_ _next _ _方法就相当于遍历了一次对象,遍历完再执行会出错

实例如下:

代码语言:javascript
代码运行次数:0
复制
# 列表举例
l = [1,2,3,4]
# 转换成迭代器对象
res = l.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
'''等于遍历了4次列表'''
# 如果再遍历一次就会出错
print(res.__next__())
#出错:StopIteration

# 区分开
l = [1,2,3,4]
# 这样用于取得就是第一个元素
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
  • 迭代取值优缺点: 优点:不依赖于索引的一种通用取值方式 缺点:取值的顺序永远都是固定的从左往右 无法重复获取
  • 索引取值优缺点: 缺点:需要提供有序容器类型才可取值(不是一种通用的方式) 优点:可以重复取值

for循环本质

  • 相当于迭代器执行了若干次双下next方法,但是有退出,不会报错
  • for循环结束python解释器会自动捕获错误,并退出
代码语言:javascript
代码运行次数:0
复制
# 演示for循环的底层原理
'''从可以遍历>>>>>遍历结束不报错'''
l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
# 要求:循环打印出列表中每个元素 但是不能使用for循环  __next__()
# 转换成迭代器对象
res = l1.__iter__()
# 没有自动捕获该错误并处理版本
#  while True:
#      print(res.__next__())

# 升级,可以正常退出
n = 0
while n<len(l1):
    print(res.__next__())
    n+=1

# 可以捕获异常,并处理
while True:
    try:
        print(res.__next__())
    except Exception:
        print('for循环结束')
        break

由上面可知,异常处理的重要性,推出下面的异常处理初始!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可迭代对象与迭代器对象
  • for循环本质
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档