迭代器
生成器(生成器的第1種實現方式: 列表生成式改為生成器;)
python中yield關鍵字
函式中如果有yield, 那麼呼叫這個函式的返回值為生成器。
當生成器g呼叫next方法, 執行函式, 知道遇到yield就停止;
再執行next,從上一次停止的地方繼續執行;
函式中遇return直接退出, 不繼續執行後面**;
生成器的第二種方式
生成器: 無緩衝區的生產者消費模型
import timeimport random
def
consumer(name):
"%s
準備買粉條
...." %(name)
while
true:
kind = yield
print "客戶
[%s]
購買了[%s]
口味的粉條
. " %(name, kind)
def producer(name):
c1 = consumer("user1")
c2 = consumer("user2")
c1.next()
c2.next()
"[%s]
準備製作公尺線
......" %(name)
for kind in ['
特辣', '
三鮮', '
香辣']:
time.sleep(random.random())
"[%s]
製作了[%s]
口味的粉條,賣給使用者
...." %(name, kind)
c1.send(kind)
c2.send(kind)
c1.close()
c2.close()
producer("
廚師user")
生成器:有緩衝區的生產者消費模型
import timeimport random
cache =
def consumer(name):
"%s
準備買粉條
...." %(name)
while
true:
kind = yield
# cache.pop(0)
cache.remove(kind)
print "客戶
[%s]
購買了[%s]
口味的粉條
. " %(name, kind)
def producer(name):
"[%s]
準備製作粉條
......" %(name)
for kind in ['
特辣', '
三鮮', '
香辣']:
time.sleep(random.random())
"[%s]
製作了[%s]
口味的粉條,賣給使用者
...." %(name, kind)
producer("
廚師user")
c1 = consumer('user1')
c1.next()
c1.send('
三鮮')
"本店現有的粉條口味
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':
"我要上天去了
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器 生成器
迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...
迭代器生成器
迭代器 iterator 概述 迭代器是訪問集合內元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素都被訪問一遍後結束。迭代器不能回退,只能往前進行迭代。這並不是什麼很大的缺點,因為人們幾乎不需要在迭代途中進行回退操作。迭代器也不是執行緒安全的,在多執行緒環境中對可變集合使用迭代器...