python 迭代器 生成器

2022-09-15 01:06:18 字數 2770 閱讀 1348

# 迭代器

'''被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會報錯

def

generator():

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

print

(content)

print(456)

yield 2g =generator()

ret = g.__next__

()print

(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
def

gen():

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 再次呼叫這個函式時,一切都將從頭建立。...