对于yield from目前我只知道这一种用法,我对它的理解也停留在yield from generator
In [1]: def reader():
...: """A generator that fakes a read from a file, socket, etc."""
...: for i in range(4):
...: yield '<< %s' % i
...:
In [2]: def reader_wrapper(g):
...: yield from g
...:
In [3]: wrap = reader_wrapper(reader())
In [4]: for i in wrap:
...: print(i)
...:
<< 0
<< 1
<< 2
<< 3
但是在廖雪峰的异步IO教程中看见一个yield from的新用法,请问下面这个yield from asyncio.sleep(1)是什么意思,asyncio.sleep(1)也是一个生成器吗?看官方文档也没有给出明确的解释,也是直接贴的代码,拜托大神解释一下!
import asyncio
@asyncio.coroutine
def hello():
print("Hello world!")
# 异步调用asyncio.sleep(1):
r = yield from asyncio.sleep(1)
print("Hello again!")
# 获取EventLoop:
loop = asyncio.get_event_loop()
# 执行coroutine
loop.run_until_complete(hello())
loop.close()
먼저 asyncio.sleep() 함수의 정의를 찾으세요
으아악즉, 이 함수는 코루틴 함수입니다. 코루틴 함수를 이렇게 호출하여 반환 값을 얻을 수 있습니다
으아악왜 이런 식으로 사용할 수 있나요?
await 자체는 코루틴에서 사용되는 키워드입니다.
의 구현이 생성기 기반이기 때문에 yield 키워드를 사용할 수 있습니다. 원본 yield from을 사용하는 이유는 무엇입니까? 🎜>yield 이건 소스가 있어야 하는데 PEP380을 보면 알 수 있습니다. 간단히 말해서 코루틴 정보를 얻기 위해 Yield를 사용하는 것이 더 번거로워서 작업을 단순화하기 위해 Yield를 추가했습니다.https:/ /www.python.org/dev/pe...
요약하면 다음과 같습니다.yield를 사용할 수 있으므로 sleep이 제너레이터를 반환한다고 해도 틀린 말은 아닙니다. from이 나오는 이유는 yield만 사용하기에는 너무 번거롭기 때문입니다. 자세한 내용은 PEP8을 참조하세요. PS: 마지막에 몇 마디만 말씀드리겠습니다. 이것이 제가 언어를 배우기 위해 블로그를 읽는 것을 권장하지 않는 이유입니다. 더 권위 있고 자세한 공식 Python 문서를 선택하는 것이 어떨까요?
코루틴의 핵심은 제너레이터입니다
이 영상을 시청하세요~
Python 3.5의 async/await 기능 구현 살펴보기
왜 한번 포장해야 하나요?
으아아아이것도 사용할 수 있나요? 매우 당황했습니다. . .
Python 작성자가 작성한 대략적인 번역 글을 읽어보실 수 있습니다