码迷,mamicode.com
首页 > 编程语言 > 详细

python学习10—迭代器

时间:2019-10-20 19:41:08      阅读:38      评论:0      收藏:0      [点我收藏+]

标签:转换   ext   color   基于   stop   定义   lock   class   __iter__   

python学习10—迭代器

1. 迭代器协议

对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往后走不能往前退)

2. 可迭代对象

实现了迭代器协议的对象,对象内部定义一个__iter__()方法

3. for循环实现机制

  字符串、列表,元组,字典,集合,文件等都不具有next方法,所以他们都不是可迭代对象(iterable object),但是为什么for循环可以进行呢?

  原因:for循环首先调用了他们的内置方法__iter()__方法将其转换为可迭代对象,然后再调用这个转换后的可迭代对象的__next()__方法,进行迭代。

l = [1,2,3]
# iterable object
iter_l = l.__iter__()
print(iter_l.__next__())

  字符串、列表、元组为有序序列,也可以通过索引取值,但是字典、集合、文件等非序列类型,不可以通过索引取值,所以出现了for循环,一个基于迭代器协议的统一的遍历方式。

4. 使用while循环实现for循环机制

l = [1,2,3]
detail_l=l.__iter__() while True: try: print(detail_l.__next__()) except StopIteration: print(end of iteration) break

 

python学习10—迭代器

标签:转换   ext   color   基于   stop   定义   lock   class   __iter__   

原文地址:https://www.cnblogs.com/yangjingxuan/p/11705927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!