python之生成器

2021-10-09 11:41:37 字數 2376 閱讀 2696

def foo(start,stop,step=1):

print('start ....')

while start < stop:

yield start

start+=step

print('end...')

g=foo(0,3)

print(g)

print(g.__iter__)

print(g.__next__)

print(next(g))

print(next(g))

print(next(g))

print(next(g)) # 最後乙個yield執行完,報錯

def eater():

print('ready to eat')

while true:

food=yield

print('get the food {},and start to eat'.format(food))

a=eater() # 得到生成器物件

print(a)

next(a) # 執行到yield掛起

a.send('baozi')

a.send(none)

next(a)

# 針對表示式形式的yield,生成器物件必須事先被初始化一次,讓函式掛起在food=yield的位置,等待呼叫g.send()方法為函式體傳值,g.send(none)等同於next(g)

# 加上裝飾器版本

初始化所有生成器函式的裝飾器

def init(func):

def warpper(*args,**kwargs):

print('hello')

g=func(*args,**kwargs)

next(g)

return g

return warpper

@init

def eater():

print('ready to eat')

while true:

food=yield

print('get the food {},and start to eat'.format(food))

# 加上裝飾器後eater=init(eater)=warpper

eater()=warpper()=g

a=eater() # 直接完成出事化next操作

def eater():

print('ready to eat')

food_list=

while true:

food=yield food_list

g=eater() # 拿到生成器

print(next(g)) # 初始化

print(g.send('banana'))

res = 條件成立時返回的值 if 條件 else 條件不成立時返回的值

4.1舉例

# 普通寫法

def max(x,y):

if x>y:

return x

else:

return y

res=max(1,2)

print(res)

# 用三元表示式

x=1y=2

res=x if x>y else y

print(res)

4.2列表生成式

list=

for i in range(10):

print(list)

xixi=['xixi {}'.format(i) for i in range(10)]

print(xixi)

4.3生成器表示式

list=[x*x for x in range(3)]

print(list) # 列表表示式返回乙個列表

g=(x*x for x in range(3))

print(g)

print(next(g))

print(next(g))

print(next(g))

# 對比列表生成式,生成器表示式的優點自然是節省記憶體(一次只產生乙個值在記憶體中)

讀取大檔案位元組數,基於生成器表示式完成

with open('c:/users/魏旭/pycharmprojects/test/haha','rb') as f:

nums=(len(line) for line in f)

total=sum(nums)

print(total)

python之生成器

使用生成器表示式取代列表解析可以同時節省cpu 和 記憶體 ram 如果你構造乙個列表的目的僅僅是傳遞給別的函式,比如 傳遞給tuple 或者set 用生成器表示式替代吧 def ord map a string for c in a string yield ord c gen ord map u...

python之生成器

先來介紹下迭代器 迭代器即迭代取值的工具 迭代 的意思就是重複的基於上一次的結果取值 迭代器可以不依賴索引取值 取值 取乙個值就會少乙個,取完了,還取值就會報錯 1.什麼是生成器 在函式內但凡出現yield關鍵字,在呼叫函式就不會執行函式內 會返回乙個迭代器物件的值,該值稱之為生成器 強調 生成器的...

Python之生成器

通過列表生成式,我們可以產生列表,但是列表容量肯定有限,如果建立乙個很大的列表元素,要占用大量的記憶體空間,如果我們只要列表前面的元素,則後面的儲存空間大大浪費,這時候我們需要引出python生成器,這樣就必要建立完整的列表,從而大大節省空間,我們稱之為 generator.建立生成器方法一 使用 ...