"""
可以直接作用於for迴圈的物件統稱為可迭代物件(iterable)。
可以被next()函式呼叫並不斷返回下乙個值的物件稱為迭代器(iterator)。
所有的iterable均可以通過內建函式iter()來轉變為iterator。
__iter__() 方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了 __next__() 方法並通過 stopiteration 異常標識迭代的完成
__next__() 方法(python2裡是next())會返回下乙個迭代器物件。
"""# 返回數字的迭代器
class myclassiter:
def __iter__(self): # 返回乙個迭代器物件,並初始值為1
self.num = 1
return self
def __next__(self): # 迭代器next返回數字,並+1
if self.num <= 5:
n = self.num
self.num += 1
return n
else: # 手動丟擲迭代器迭代完成的異常,stopiteration表示迭代結束異常
raise stopiteration
myclass = myclassiter()
myiter= iter(myclass)
for x in myiter:
print(x)
# 在呼叫next()方法時,需要注意的是迭代器是否結束,如果結束就會丟擲異常stopiteration
try:
print("next : ",next(myiter))
except stopiteration:
print("the iter is end ! ")
# 迭代器貌似沒有重置的說法,如果常用的話,可以轉為列表
mylist =list(myiter)
print(type(myiter))
print(type(mylist)," : ",mylist)
print("---------------------字典迭代器 1 ---------------------")
dict1=
# 迭代器iterators (iter)
# iter1=iter(dict1) 迭代器物件為字典的key
iter1=iter(dict1.values())
# 迭代器指定後不能在修改物件長度,"runtimeerror: dictionary changed size during iteration"
# dict1.__setitem__("age",'28')
while true:
try:
print(next(iter1))
except stopiteration:
break
print(dict1)
print("---------------------字典迭代器 2 ---------------------")
listdict1=[,,]
for x in listdict1:
x.__setitem__("age","28")
print(listdict1)
iterdict1=iter(listdict1)
for indx in iterdict1:
xinxi=list(indx.values()) # indx.values()獲取字典的values;indx的話則為key
print(xinxi)
print("---------------------生成器---------------------")
"""呼叫乙個生成器函式,返回的是乙個迭代器物件。
使用了 yield 的函式被稱為生成器(generator)
跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。
在生成器執行中,每次yield時函式會暫停並儲存當前所有的執行資訊,返回yield 的值,並在下一次執行next()方法時從當前位置繼續執行。
"""def generator(max):
a=0while aa += 1
yield a # 生成器識別符號號 yield
itergen1=generator(4) # 生成器返回乙個迭代器物件
for x in itergen1:
print(x)
python 3 生成器 and 迭代器
迭代器官方文件 大多是的檔案物件可以用for迴圈語句,例如 for element in 1,2,3 print element for element in 1,2,3 print element for key in print key for char in 123 print char fo...
python3生成器 Python3 生成器
python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...
Python3 迭代器與生成器
迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1 2,3 ...