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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM