生成器中的send

2021-09-26 06:01:49 字數 1386 閱讀 2335

import time

def foo():

print("******start*****")

print("this is the first line")

r1 = yield 'r1'

print("this is the second value:%s" % r1)

r2 = yield 'r2'

print("this is the third value:%s" % r2)

r3 = yield 'r3'

print("this is the last value:%s" % r3)

f = foo()

f.send(none)

var1 = f.send('send 1') #傳回給上乙個yield的值

print(var1) #r2返回來的還是yield後邊的值

##方法一:yield實現協程

def consumer():

r = ''

while true:

var = yield r

if not var:

return

print("[consumer] is consume: %s"%var)

time.sleep(3)

r = "200 ok"

def produce(c):

next(c)

n = 0

while n < 5:

n = n+1

print("[produce] is produce: %s" % n)

r = c.send(n)

print("[produce] consumer return: %s "%r)

c.close()

if __name__ == "__main__":

c = consumer()

produce(c)

#方法二:gevent實現協程

#gevent會主動識別程式內部的io操作,當子程式遇到io後,切換到別的子程式。如果所有的子程式都進入io,則阻塞。

import gevent

def foo():

print("foo is running")

gevent.sleep(2)

print("from bar to foo running ")

def bar():

print("bar is running")

gevent.sleep(2)

print("from foo to bar running ")

gevent.joinall([gevent.spawn(foo), gevent.spawn(bar)]) #建立執行緒並行執行程式,碰到io就切換

yield生成器中的send方法

yield生成器中提供了send方法,可以給生成器傳遞引數。我們可以使用以下函式感受 def foo print enter foo while true result yield 4 if result print send me a value d result,return else prin...

python生成器中yield和send分析

在python中生成器是指用 實現迭代器的的功能本質還是迭代器,只不過是 實現迭代器功能。在python中生成器是由函式實現的,通常我們在函式中加入yeild就可以實現生成器。定義乙個函式 def func print 111 yield 3 print 222 g func 執行上面 你會發現函式...

Python筆記 生成器方法send

日期 20170926 生成器內有乙個方法send,可再次傳入乙個值。上面那句可能聽不懂,但是不要緊,我們先來看看 usr bin python3 defmygenerator value yield 1yield value return done gen mygenerator print ne...