# 迭代器'''被for迴圈的資料
list
dict
strset
tuple
f = open()
range()
enumerate
'''# print(dir()) # 告訴我列表擁有的所有方法
# 雙下劃線方法:很少直接呼叫的方法,一般情況下,是通過其他語法觸發的
# 只要是能被for迴圈的資料型別 就一定擁有 __iter__ 方法
# .__iter__():迭代器 --> __next__ # 通過next就可以從迭代器中乙個乙個的取值
from collections import iterable #可迭代的
from collections import iterator #
迭代器print(isinstance(,iterable)) #
判斷 是不是iterable的關係
print(isinstance(,iterator))
#迭代器概念# 迭代器協議和可迭代協議
# 迭代器協議 : 內部含有 __next__ 和 __iter__方法的就是迭代器
# 可以被for迴圈的都是可迭代的
# 可迭代的內部都有 __iter__ 方法,可迭代協議:只要含有 __iter__ 方法都是可迭代的 ('__iter__' in dir(資料))
# 只要是迭代器 一定可迭代
# 可迭代的__iter__() 方法就可以得到乙個迭代器
# 迭代器中的 __next__() 方法可以乙個乙個的獲取值
# 迭代器的特點
# 很方便使用,且只能取所有的資料取一次
# 節省記憶體空間
# 生成器
# 生成器的本質就是迭代器
# 生成器的表現形式
# 生成器函式
# 生成器表示式
# 生成器函式:含有yield關鍵字的函式就是生成器函式
# 呼叫函式的之後函式不執行,返回乙個生成器
# 呼叫next方法的時候會取到乙個值
# 直到取完最後乙個,在執行next會報錯
defgenerator():
for i in range(20000):
yield
'你想要的%s
'%ig = generator() #
呼叫生成器函式得到乙個生成器
ret = g.__next__() #
每一次執行g.__next__ 就是從生成器中取值,預示著生成器函式中的**繼續執行
num =0
for i in
g: num += 1
if num > 50:
break
print(i)
# 從生成器中取值的幾個方法# next
# for
# 資料型別的強制轉換 :占用記憶體
readline 一行一行讀read(10)
#在讀出來的內容前面加上乙個'****',再返回給呼叫著
defgenerator():
print(123)
content = yield 1
(content)
print(456)
yield 2g =generator()
ret = g.__next__
(ret)
ret = g.send('
hello')
print(ret)
#send獲取下乙個值得效果和next基本一致,只是在獲取下乙個值時候,給上乙個值yiled得位置傳遞乙個資料# 使用send注意事項
# 第一次使用生成器的時候 是用next獲取下乙個值
# 最後乙個 yield 不能接受外部的值
#獲取移動平均值
definit(func):
def inner(*args,**kwargs):
rg = func(*args,**kwargs) #
g = **erage()
rg.__next__
()
return
rg
return
inner
@init
def**erage():
sum =0
count =0
**g =0
while
true:
num = yield
**g sum +=num
count += 1**g = sum/count
rg =**erage()
ret = rg.send(10)
print(ret)
# yield from
defgen():
a = '
asdfg
'b = '
12345
'yield
from a #
能夠乙個乙個取a的值
yield
from
bg =gen()
for i in
g:
print(i)
Python 迭代器 生成器
可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...
python 迭代器,生成器
什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...
python 迭代器 生成器
知識背景 1 呼叫乙個普通的python函式時,一般是從函式的第一行 開始執行,結束於return語句 異常或者函式結束 可以看作隱式的返回none 2 一旦函式將控制權交還給呼叫者,就意味著全部結束。函式中做的所有工作以及儲存在區域性變數中的資料都將丟失 3 再次呼叫這個函式時,一切都將從頭建立。...