我正在玩生成器和生成器表达式,我不完全确定我理解它们是如何工作的(一些参考资料):
>>> 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 isn't ignored
-1
Run Code Online (Sandbox Code Playgroud)
我明白这是相当远的,我(目前)不能想到这个用例(所以不要问;)
我主要是试图弄清楚这些不同的生成器方法是如何工作的(以及生成器表达式如何工作).为什么我的第二个例子在产生合理价值和None?之间交替?还有,任何人都可以解释为什么我generator.send的一个被忽略而另一个不被忽略了吗?