相关疑难解决方法(0)

实际上,Python 3.3中新的"yield from"语法的主要用途是什么?

我很难将我的大脑包裹在PEP 380周围.

  1. "收益率"有用的情况是什么?
  2. 什么是经典用例?
  3. 为什么它与微线程相比?

[更新]

现在我明白了我的困难的原因.我使用过发电机,但从未真正使用过协程(由PEP-342引入).尽管有一些相似之处,但生成器和协同程序基本上是两个不同的概念.理解协同程序(不仅仅是生成器)是理解新语法的关键.

恕我直言协程是最晦涩的Python功能,大多数书籍使它看起来毫无用处和无趣.

感谢您的回答,但特别感谢agf和他与David Beazley演讲相关的评论.大卫摇滚.

python yield

349
推荐指数
7
解决办法
9万
查看次数

从调用生成器的函数返回或产生?

我有一个生成器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)

python yield return function generator

31
推荐指数
4
解决办法
1979
查看次数

为什么使用共享生成器的“yield from”看似等效的代码会导致 StopIteration?

我试图理解关键字的行为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)

两种情况为何有差异?

python generator

9
推荐指数
0
解决办法
59
查看次数

标签 统计

python ×3

generator ×2

yield ×2

function ×1

return ×1