環境
- CPython 3.7.1
問題
以下のようなgenerator関数があるのですが
python3
1def some_task(): 2 r = yield 'A' 3 print("from owner:", r) 4 r = yield 'B' 5 print("from owner:", r) 6 return "C" 7 8try: 9 gen = some_task() 10 r = gen.send(None) 11 print("from gen:", r) 12 r = gen.send('1') 13 print("from gen:", r) 14 r = gen.send('2') 15 print("from gen:", r) 16except StopIteration as e: 17 print("gen returned:", e.value)
text
1from gen: A 2from owner: 1 3from gen: B 4from owner: 2 5gen returned: C
このgenerator関数は@types.coroutine
で包んであげるとasync関数のような物になりますよね?
python3
1import types 2 3@types.coroutine 4def some_task(): 5 r = yield 'A' 6 print("from owner:", r) 7 r = yield 'B' 8 print("from owner:", r) 9 return "C" 10 11 12async def some_task2(): 13 return await some_task() # await可能! 14 15try: 16 coro = some_task2() # 17 r = coro.send(None) 18 print("from coro:", r) 19 r = coro.send('1') 20 print("from coro:", r) 21 r = coro.send('2') 22 print("from coro:", r) 23except StopIteration as e: 24 print("coro returned:", e.value)
text
1from coro: A 2from owner: 1 3from coro: B 4from owner: 2 5coro returned: C
でもこれを@types.coroutine
を使わずにやろうとすると
python3
1async def some_task(): 2 r = yield 'A' 3 print("from owner:", r) 4 r = yield 'B' 5 print("from owner:", r) 6 return "C" # SyntaxError: 'return' with value in async generator
async generatorではreturn文に値を指定できないと怒られます。どうすれば@types.coroutine
を用いずに同等のcodeにできるでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/04 13:25
2019/12/04 13:34
2019/12/04 14:35
2019/12/04 15:24