我很难将我的大脑包裹在PEP 380周围.
[更新]
现在我明白了我的困难的原因.我使用过发电机,但从未真正使用过协程(由PEP-342引入).尽管有一些相似之处,但生成器和协同程序基本上是两个不同的概念.理解协同程序(不仅仅是生成器)是理解新语法的关键.
恕我直言协程是最晦涩的Python功能,大多数书籍使它看起来毫无用处和无趣.
感谢您的回答,但特别感谢agf和他与David Beazley演讲相关的评论.大卫摇滚.
我有一个生成器generator和一个方便的方法 - generate_all。
def generator(some_list):
for i in some_list:
yield do_something(i)
def generate_all():
some_list = get_the_list()
return generator(some_list) # <-- Is this supposed to be return or yield?
Run Code Online (Sandbox Code Playgroud)
应该generate_all return还是yield?我希望两种方法的用户都使用相同的方法,即
for x in generate_all()
Run Code Online (Sandbox Code Playgroud)
应该等于
some_list = get_the_list()
for x in generate(some_list)
Run Code Online (Sandbox Code Playgroud) 我试图理解关键字的行为yield from,但发现它很难解释......
这是设置:
案例 1 - 如果我运行这个代码片段,也不会有例外。
gen = (x for x in range(10))
def func():
yield from gen
F21 = func()
F22 = func()
next(F21)
next(F22)
Run Code Online (Sandbox Code Playgroud)
案例 2 - 这次我没有引入变量F21和,而是遇到了异常。F22StopIteration
gen = (x for x in range(10))
def func():
yield from gen
next(func())
next(func())
Run Code Online (Sandbox Code Playgroud)
两种情况为何有差异?