我正在玩生成器和生成器表达式,但我不完全确定我理解它们是如何工作的(一些参考资料):
>>> a = (x for x in range(10))
>>> next(a)
0
>>> next(a)
1
>>> a.send(-1)
2
>>> next(a)
3
所以看起来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 isn't ignored
-1
我知道这还很遥远,而且我(目前)想不出一个用例(所以不要问;)
我主要是在探索试图弄清楚这些不同的生成器方法是如何工作的(以及生成器表达式一般是如何工作的)。为什么我的第二个示例在产生合理值和 之间交替None
?另外,谁能解释为什么我generator.send
的一个被忽略而另一个没有?