次のエディターは、Python ジェネレーター コルーチン操作の例を示します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして見てみましょう
1. Yield の操作方法
次のようにジェネレーターを定義します:
def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) while True: goods = yield print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) p = put_on("bigberg") #输出 G:\python\install\python.exe G:/python/untitled/study4/test/double.py Process finished with exit code 0
yield を通じて関数をジェネレーターに変換するとき、それを直接実行します。結果を返さないでください。この時点では関数はすでにジェネレーターであるため、next() を通じて値を取得し、yield が発生したときに再び関数から抜け出す必要があります。
print(type(p)) #输出 <class 'generator'>
next() メソッドを追加します。
def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) while True: goods = yield #遇到yield中断 print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) #中断后运行部分 p = put_on("bigberg") p.__next__() #输出 Hi bigberg, 货物来了,准备搬到仓库!
この時点で、関数は Goods = yield で中断されます。 next() 関数を再度呼び出すと、関数はコンテンツのみを実行します。中断後、つまり上記の例では収量の低い部分です。
別の next():
def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) while True: goods = yield print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) p = put_on("bigberg") p.__next__() p.__next__() #输出 Hi bigberg, 货物来了,准备搬到仓库! 货物[None]已经被bigberg搬进仓库了。
yield のコンテンツの一部に対して 2 回目の next() を実行できますが、値は商品に渡されないため、商品は None になります。
概要:
yield を通じて関数をジェネレーターに変換します。実行するには next() メソッドを使用する必要があります
yield は関数の割り込みステータスを保持するだけで、 next() を再度呼び出すと、 yield の後の部分
yield が値を返さない場合は、None の空の値を返します
2. Send() は値を渡します
def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) while True: goods = yield print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) p = put_on("bigberg") p.__next__() p.send("瓜子") #输出 Hi bigberg, 货物来了,准备搬到仓库! 货物[瓜子]已经被bigberg搬进仓库了。
概要:
__next__ () はこの yield を呼び出すだけです。または、yield を呼び出すことができますが、yield に値を渡しません。
send() メソッドは yield を呼び出し、yield に値を渡すことができます
send() 関数を使用する前に __next__() を使用する必要があります。これは最初に中断する必要があり、中断された場合にのみ値を渡すことができるためです。 2回目に電話した。
def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) while True: goods = yield print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) p = put_on("bigberg") p.__next__() p.send("瓜子") p.send("花生") p.send("饼干") p.send("牛奶") #多次调用send() Hi bigberg, 货物来了,准备搬到仓库! 货物[瓜子]已经被bigberg搬进仓库了。 货物[花生]已经被bigberg搬进仓库了。 货物[饼干]已经被bigberg搬进仓库了。 货物[牛奶]已经被bigberg搬进仓库了。
3. 並列効果を実現する単一スレッド (コルーチン)
import time def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) while True: goods = yield print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) def transfer(name): p = put_on('A') p2 = put_on('B') p.__next__() p2.__next__() print("%s将货物送来了!"%name) for i in range(5): time.sleep(1) print("%s递过来两件货物"%name) p.send("瓜子") p2.send("花生") transfer("bigberg") #输出 Hi A, 货物来了,准备搬到仓库! Hi B, 货物来了,准备搬到仓库! bigberg将货物送来了! bigberg递过来两件货物 货物[瓜子]已经被A搬进仓库了。 货物[花生]已经被B搬进仓库了。 bigberg递过来两件货物 货物[瓜子]已经被A搬进仓库了。 货物[花生]已经被B搬进仓库了。 bigberg递过来两件货物 货物[瓜子]已经被A搬进仓库了。 货物[花生]已经被B搬进仓库了。 bigberg递过来两件货物 货物[瓜子]已经被A搬进仓库了。 货物[花生]已经被B搬进仓库了。 bigberg递过来两件货物 货物[瓜子]已经被A搬进仓库了。 货物[花生]已经被B搬进仓库了。
以上がPython ジェネレーター コルーチンの操作を例とともに詳しく説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。