码迷,mamicode.com
首页 > 其他好文 > 详细

可迭代对象 Iterable 与 迭代器 Iterator

时间:2017-09-04 14:58:11      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:pre   生成   元素   iterable   定义   size   生成器   iterator   object   

迭代器 Iterator与可迭代对象 

 

1 常见的可迭代对象:

字符串

列表
字典
集合
元组
文件句柄 -->> 迭代器
range() -->> 只是一个可迭代对象
迭代器本身也可迭代



2 判断是否是 可迭代对象 的方法:

1  from collections import Iterable 
   isinstance(abcd,Iterable)
 2 可以判断不同方法的差异   dir()  用set集合   有__iter__() 方法 的数据类型 (即  可迭代协议 ------- 数据类型与python解释器)
 

可迭代对象 使用__iter__() 方法 ----->>> 转换为 迭代器 iterator


3 判断是否是 迭代器 的方法:

1  from collections import Iterator
   itor=[1,2,3].__iter__()
   print(isinstance(itor,Iterator))
2  具有 __next__() 且 __iter__() 方法      迭代器协议

 

4 迭代器特点
 迭代器特点--从头取到尾

某种数据类型 的 迭代器该数据类型 多几个特殊的迭代器使用方法 (且有 该数类型的所有方法 )
   ‘__setstate__‘, ‘__next__‘, ‘__length_hint__‘   字典和集合 无序没有 __setstate__ 方法


li=[1,3,3]
itor=[1,2,3].__iter__()

print(itor,type(itor))    # <list_iterator object at 0x0000000001E79240> <class ‘list_iterator‘>

li_set=set(li)
itor_set=set(itor)

print(itor_set.issuperset(li_set))   # True

print(set(dir(itor))-set(dir(li)) )  # {‘__setstate__‘, ‘__next__‘, ‘__length_hint__‘}

 

# itor=[1,3,3].__iter__()
# print(itor.__next__())

# print(itor.__length_hint__()) # 剩余的元素个数 # itor.__setstate__(2) # 设置从哪里开始 # # print(itor.__next__())


可以用  for 循环 一个 可迭代的对象 , 也可以是一个迭代器

 

5 迭代器的用途 意义:


迭代器的功能

 1   对python的基本数据类型进行统一的遍历  不需要关心每一个值得类型(for 去遍历)

 2   可以节省内存---------多次运算

6 迭代器的种类:

 本来就是 ----- 文件句柄

可迭代对象 转换 ----- 可迭代对象 使用__iter__() 方法 ----->>> 转换为 迭代器 iterator


7 生成器是自己定义的一个迭代器

 




 

可迭代对象 Iterable 与 迭代器 Iterator

标签:pre   生成   元素   iterable   定义   size   生成器   iterator   object   

原文地址:http://www.cnblogs.com/big-handsome-guy/p/7473220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!