相关疑难解决方法(0)

(list | set | dict)包含yield表达式的理解不返回(list | set | dict)

Python 3.3

我构建了这个有点神秘的python 3.3:

>>> [(yield from (i, i + 1, i)) for i in range(5)]
<generator object <listcomp> at 0x0000008666D96900>
>>> list(_)
[0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 5, 4]
Run Code Online (Sandbox Code Playgroud)

如果我在列表构造函数中使用生成器理解,我会得到不同的结果:

>>> list((yield from (i, i + 1, i)) for i in range(5))
[0, 1, 0, None, 1, 2, 1, None, 2, 3, 2, None, 3, 4, 3, None, 4, 5, 4, None]
Run Code Online (Sandbox Code Playgroud)

为什么列表理解不返回列表?

Python 2.7

我可以在python 2中得到类似的奇怪效果(使用集合理解,因为列表推导具有奇数范围):

>>> {(yield …
Run Code Online (Sandbox Code Playgroud)

python generator

17
推荐指数
1
解决办法
610
查看次数

试图将收益率理解为一种表达方式

我正在玩生成器和生成器表达式,我不完全确定我理解它们是如何工作的(一些参考资料):

>>> a = (x for x in range(10))
>>> next(a)
0
>>> next(a)
1
>>> a.send(-1)
2
>>> next(a)
3
Run Code Online (Sandbox Code Playgroud)

所以看起来好像generator.send被忽略了.这是有道理的(我猜)因为没有明确的yield表达式来捕获发送的信息......

然而,

>>> a = ((yield x) for x in range(10))
>>> next(a)
0
>>> print next(a)
None
>>> print next(a)
1
>>> print next(a)
None
>>> a.send(-1)  #this send is ignored, Why? ... there's a yield to catch it...
2
>>> print next(a)
None
>>> print next(a)
3
>>> a.send(-1)  #this send …
Run Code Online (Sandbox Code Playgroud)

python generator

5
推荐指数
0
解决办法
417
查看次数

标签 统计

generator ×2

python ×2