1.套模板
def init(func):res=func(*args,**kwargs)
next(res)
return res
def init(func):res=func(*args,**kwargs)
next(res)
return res
@init #eater=init(eater)
def eater(name):
print('%s start to eat' % name)
food_list=
while true:
food = yield food_list
print('%s eat %s' %(name,food))
#e.send('123')
print(e.send('123'))
print(e.send('123'))
print(e.send('123'))
zhejiangf4 start to eat
zhejiangf4 eat 123
['123']
zhejiangf4 eat 123
['123', '123']
zhejiangf4 eat 123
['123', '123', '123']
2.作業1
1'''2
檔名:a.txt,檔案內容如下:34
tesla 100000 1
5mac 3000 2
6lenovo 30000 3
7chicken 10 389
要求1:實現迭代器函式cat
10要求2:定義迭代器函式grep
11要求3:模擬管道的功能,將cat的處理結果作為grep的輸入
1213
# 定義迭代器cat
14# 定義迭代器grep
15# 模擬管道功能, 將cat的處理結果作為grep的輸入
16'''
17def
cat(file):
18with open(file) as f:
19for line in
f:20
yield
line.strip()
2122
defgrep(keywords,lines):
23for line in
lines:
24if keywords in
line:
25yield
line
26 g1 = cat('
b.txt')
27 g2 = grep('
',g1)
28for i in
g2:29
print(i)
3.作業2
#!/usr/bin/env python3# -*- coding: utf-8 -*-
# 生成器的應用, 將下面的函式改為協程函式, 用send來傳送url
# def get(url):
# def index():
# return urlopen(url).read()
# return index
from urllib.request import urlopen
def get():
while true: #while不斷做這個事。做乙個死迴圈. (如果沒有while根據next傳值send傳值做幾次)
url=yield #初始化過了,從暫停位置開始走,把send裡面的值傳給它yield,把yield的值再給url,在往下執行res,再列印
res=urlopen(url).read()
print(res)
g=get()
next(g) #初始化一下,讓函式停在那個位置
g.send('')
##爬網頁
python協程函式
例項 def menu x print welcome s to shaxian restaurant x men list while true print men list food yield men list print s start to eat s x,food g menu 張三 n...
協程巢狀協程
import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...
9 協程 協程理論
本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...