XWQsharp的博客

我的博客

迭代器

迭代器


一. 可迭代对象

可以直接作用于for循环的对象统称为可迭代对象,即Iterable。

1. 常见的可迭代对象

常见迭代对象: str list tuple dict set range

2. 判断可迭代对象的方法

方式一:dir(对象)

如果含有__iter__ ,那这个对象就叫做可迭代对象。

str1 = 'hello'                      #字符串为可迭代对象
print('__iter__' in dir(str1))

li = ["alex","野模"]                 #列表为可迭代对象
print('__iter__' in dir(li))

num = 2018
print('__iter__' in dir(num))


计算结果:

True
True
False
方式二:isinstance()方法
from collections import Iterable 

str1 = 'hello'                      #字符串为可迭代对象
print(isinstance(str1,Iterable))

li = ["alex","野模"]                 #列表为可迭代对象
print(isinstance(li,Iterable))

num = 2018
print(isinstance(num,Iterable))


计算结果:

True
True
False

二. 迭代器

对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器。

可迭代对象执行obj.iter()得到的结果就是迭代器对象。

而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象。

1.可迭代对象转换迭代器

str1 = 'ABC'
strIter = str1.__iter__()               #得到迭代器对象,迭代器对象即有__iter__又有__next__
print(strIter)                          #结果为迭代器
print(strIter.__next__())
print(strIter.__next__())
print(strIter.__next__()) 


计算结果:

<str_iterator object at 0x10e4f3518>
A
B
C

2. 迭代器的优缺点

优点:

  • 提供一种统一的、不依赖于索引的迭代方式
  • 惰性计算,节省内存

缺点:

  • 无法获取长度(只有在next完毕才知道到底有几个值)
  • 一次性的,只能往后走,不能往前退
阅读更多
文章标签: 迭代器 迭代对象
个人分类: python函数
下一篇装饰器
想对作者说点什么? 我来说一句

C++迭代器简介:C++迭代器

2010年08月24日 16KB 下载

STL迭代器类型

2012年08月15日 65KB 下载

迭代器Iterator.txt

2011年07月31日 6KB 下载

没有更多推荐了,返回首页

关闭
关闭