迭代器,生成器

2021-08-17 12:30:35 字數 3295 閱讀 6473

迭代器

生成器(生成器的第1種實現方式: 列表生成式改為生成器;)

python中yield關鍵字

函式中如果有yield, 那麼呼叫這個函式的返回值為生成器。

當生成器g呼叫next方法, 執行函式, 知道遇到yield就停止;

再執行next,從上一次停止的地方繼續執行;

函式中遇return直接退出, 不繼續執行後面**;

生成器的第二種方式

生成器: 無緩衝區的生產者消費模型

import time

import random

def

consumer(name):

print

"%s

準備買粉條

...." %(name)

while

true:

kind = yield

print "客戶

[%s]

購買了[%s]

口味的粉條

. " %(name, kind)

def producer(name):

c1 = consumer("user1")

c2 = consumer("user2")

c1.next()

c2.next()

print

"[%s]

準備製作公尺線

......" %(name)

for kind in ['

特辣', '

三鮮', '

香辣']:

time.sleep(random.random())

print

"[%s]

製作了[%s]

口味的粉條,賣給使用者

...." %(name, kind)

c1.send(kind)

c2.send(kind)

c1.close()

c2.close()

producer("

廚師user")

生成器:有緩衝區的生產者消費模型

import time

import random

cache =

def consumer(name):

print

"%s

準備買粉條

...." %(name)

while

true:

kind = yield

# cache.pop(0)

cache.remove(kind)

print "客戶

[%s]

購買了[%s]

口味的粉條

. " %(name, kind)

def producer(name):

print

"[%s]

準備製作粉條

......" %(name)

for kind in ['

特辣', '

三鮮', '

香辣']:

time.sleep(random.random())

print

"[%s]

製作了[%s]

口味的粉條,賣給使用者

...." %(name, kind)

producer("

廚師user")

c1 = consumer('user1')

c1.next()

c1.send('

三鮮')

print

"本店現有的粉條口味

throw 方法:給生成器傳送乙個異常

迷你聊天機械人

def chat_robot():

res = ''

while

true:

receive = yield res

if 'hi'

in receive or '你好

' in receive:

res = "你好"

elif

'name'

in receive or '姓名

' in receive:

res = "

不告訴你

."elif

'age'

in receive or '年齡

' in receive:

res = "

就不告訴你

."else:

res = "

我現在想要睡覺了

."chat = chat_robot()

next(chat)

while

true:

send_data = raw_input("

請說出想要對人家說的話:

") if send_data == 'q'

or send_data == 'quit':

print

"我要上天去了

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器 生成器

迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...

迭代器生成器

迭代器 iterator 概述 迭代器是訪問集合內元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素都被訪問一遍後結束。迭代器不能回退,只能往前進行迭代。這並不是什麼很大的缺點,因為人們幾乎不需要在迭代途中進行回退操作。迭代器也不是執行緒安全的,在多執行緒環境中對可變集合使用迭代器...