練習26 迭代器,生成器

2021-10-12 03:27:26 字數 1711 閱讀 2130

# 可迭代物件

# 可迭代物件滿足可迭代協議

# 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...