同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库
Generator Functions Versus Generator Expressions
Interestingly, the same iteration can often be coded with either a generator function or a generator expression. The following generator expression, for example, repeats each character in a string four times:
>>> G = (c * 4 for c in 'SPAM') # Generator expression
>>> list(G) # Force generator to produce all results
['SSSS', 'PPPP', 'AAAA', 'MMMM']
The equivalent generator function requires slightly more code, but as a multistatement function it will be able to code more logic and use more state information if needed:
>>> def timesfour(S): # Generator function
... for c in S:
... yield c * 4
...
>>> G = timesfour('spam')
>>> list(G) # Iterate automatically
['ssss', 'pppp', 'aaaa', 'mmmm']
Both expressions and functions support both automatic and manual iteration—the prior list call iterates automatically, and the following iterate manually:
>>> G = (c * 4 for c in 'SPAM')
>>> I = iter(G) # Iterate manually
>>> next(I)
'SSSS'
>>> next(I)
'PPPP'
>>> G = timesfour('spam')
>>> I = iter(G)
>>> next(I)
'ssss'
>>> next(I)
'pppp'
Notice that we make new generators here to iterate again—as explained in the next section, generators are one-shot iterators.
请支持我们,让我们可以支付服务器费用。
使用微信支付打赏
