# 可迭代物件
# 可迭代物件滿足可迭代協議
# for i in 'abc':
# print(i)
# for i in 123:
# print(i) # 'int' object is not iterable
# 物件內部含有__iter__方法就是可迭代物件
# 可迭代物件: str list dict set tuple range()
# s1 = 'strs'
# print(dir(s1))
# 判斷乙個物件是否是可且待物件:
# 第乙個方法
# dic =
# print('__iter__' in dir(s1))
# print('__iter__' in dir(dic))
# 第二個方法
# from collections.abc import iterable
from collections.abc import iterator
# print(isinstance('alex',iterable)) # true
# print(isinstance('alex',iterator)) # true
# print(isinstance('alex',str))
# 迭代器?
# 物件內部含有__iter__方法並且含有__next__方法就是迭代器
# f = open('彙總',encoding='utf-8',mode='r')
# print('__iter__' in dir(f))
# print('__next__' in dir(f))
# print('__iter__' in dir(dict))
# print('__next__' in dir(dict))
# 可迭代物件 vs 迭代器
# 可迭代物件不能取值,迭代器可以取值
# 可迭代物件 --> (轉化成)迭代器
# lis = [1,2,3] # 可迭代物件
# # itel = lis.__iter__() # 迭代器
# ite1 = iter(lis)
# print(ite1)
# 迭代器如何取值? next一次,取乙個值
# print(ite1.__next__())
# print(ite1.__next__())
# print(ite1.__next__())
# print(ite1.__next__())
# 1. 可迭代物件不能取值,迭代器可以取值
# 2. 迭代器非常節省記憶體
# 3. 迭代器每次只會取乙個值
# 4. 迭代器單向的,一條路走到頭
# s1 = 'daerwer'
# for i in s1:
# print(i)
# 1. 將可迭代物件轉化成迭代第
# 2. 呼叫__next__方法取值
# 3. 利用異常處理停止報錯
# iter1 = iter(s1)
## while 1:
# try:
# print(iter1.__next__())
# except stopiteration:
# break
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器,生成器
迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...
迭代器 生成器
迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...