<p>我有一个相当基本的代码来测试生成器函数和生成器表达式。它就像一个符咒,但我不知道如何让生成器表达式<code>genPairs</code>在达到最终值后停止打印。我曾尝试使用<code>for i in range (0, xyz)</code>来表示xyz是多个不同的len()调用,但每当我尝试使用生成器表达式的大小时,都会遇到一个错误。为了节省时间,我的问题是关于python代码的最后3行。你知道吗</p>
<p>代码:</p>
<pre><code>import re
def genLetters(string):
for letter in string:
yield letter
letterTable = {}
print("Input your string")
regex = re.compile('[^a-zA-Z]')
inStr = input()
newString = regex.sub("",inStr).lower()
test = genLetters(newString)
for i in range(0,len(newString)):
temp = next(test)
if temp not in letterTable:
letterTable[temp] = 1
else:
letterTable[temp] +=1
letterTable = iter(sorted(letterTable.items()))
genPairs = (item for item in letterTable)
while genPairs:
print(next(genPairs))
</code></pre>
<p>输出:</p>
<pre><code> Input your string
porkpork
('k', 2)
('o', 2)
('p', 2)
('r', 2)
Traceback (most recent call last):
File "hw2-1.py", line 27, in <module>
print(next(genPairs))
StopIteration
</code></pre>
<p>我该怎么做才能让它不打印<code>traceback...stop iteration</code>废话?
有没有办法限制</p>
<p>for循环将耗尽生成器并为您捕获<code>StopIteration</code>:</p>
<pre><code>for element in genPairs:
print(element)
</code></pre>
<p>使用代码<code>while genPairs</code>没有意义,因为生成器表达式本身总是真实的。你知道吗</p>