3.迭代器以及迭代器的作用

#迭代器
'''
迭代是访问集合元素的一种方式,迭代器是一个能够记住遍历位置的对象
迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完结束
如果想访问一个元素,需要把这个元素前面的所有元素都遍历后,才可以访问
'''
#1.可迭代的对象,像(1),(2)这些对象称之为可迭代对象(Iterable)
#(1)以直接作用for循环的数据类型有:list/tuple/dict/set/str
#(2)generator:生成器和生成器函数
# list1 = [11,22,33]
# for i in list1:
#     print(i)
# for char in 'i love china!':
#     print(char)

#2.判断是否迭代
from collections import Iterable,Iterator
# def outPrint(msg):
#     #判断msg是否可迭代
#     flag = isinstance(msg,Iterable)
#     if flag:
#         for i in msg:
#             print(i)
#     else:
#         print(msg)
# outPrint(1)
# outPrint([11,22,33])

#练习1
# print(isinstance([],Iterable))#True
# print(isinstance((),Iterable))#True
# print(isinstance({},Iterable))#True
# print(isinstance('love',Iterable))#True
# print(isinstance((x for x in range(10)),Iterable))#True

# 生成器不但可以作用于for循环,还可以被next函数不断调用,并饭后下一个值,直到
# 最后抛出StopIterable异常,表示无法返回下一个值

#练习2
#可以被next()函数调用并不断返回下一个值的对象称之为迭代器(Iterator)
#如果是迭代器对象那一定可迭代
#判断迭代器对象
# print(isinstance([],Iterator))#False
# print(isinstance((),Iterator))#False
# print(isinstance({},Iterator))#False
# print(isinstance('love',Iterator))#False
# print(isinstance((x for x in range(10)),Iterator))#True

#生成器都是Iterator对象,但list/dict/str虽然是Iterable,但不是Iterator

#iter()函数
#把list/dict/str等等Iterable容器,变成Iterator
list2 = [11,22,33]
# print(next(list2))
list2 = iter(list2)
print(next(list2))
print(next(list2))
print(next(list2))
# print(next(list2))
'''
总结:
1.凡是可作用于for循环的对象都是Iterable
2.凡是可作用于next()的函数的对象都是Iterator
3.iter()函数用于把Iterable容器,变成Iterator

迭代器延展:
对于"流式"数据处理方式可减少内存消耗:
比如处理文件,大视频等,一下猛地把全部数据取出来放到内存里就会导致程序消耗大量内存
一般我们一部分一部分的对文件进行处理
'''
for text_line in open('userInfo.txt'):
    print(text_line)
    break

 

posted @ 2018-03-23 21:00  Bob__Zhang  阅读(3030)  评论(0编辑  收藏  举报