Dive Into Python 3中的迭代器示例 [英] Iterator example from Dive Into Python 3
问题描述
我正在从 http://www.diveintopython3.net/中学习Python作为第一语言.在第7章中, http://www.diveintopython3.net/iterators.html 中有一个使用迭代器的示例.
I'm learning Python as my 1st language from http://www.diveintopython3.net/. On Chp 7, http://www.diveintopython3.net/iterators.html, there is an example of how to use an iterator.
import re
def build_match_and_apply_functions(pattern, search, replace):
def matches_rule(word):
return re.search(pattern, word)
def apply_rule(word):
return re.sub(search, replace, word)
return [matches_rule, apply_rule]
class LazyRules:
rules_filename = 'plural6-rules.txt'
def __init__(self):
self.pattern_file = open(self.rules_filename, encoding='utf-8')
self.cache = []
def __iter__(self):
self.cache_index = 0
return self
def __next__(self):
self.cache_index += 1
if len(self.cache) >= self.cache_index:
return self.cache[self.cache_index - 1]
if self.pattern_file.closed:
raise StopIteration
line = self.pattern_file.readline()
if not line:
self.pattern_file.close()
raise StopIteration
pattern, search, replace = line.split(None, 3)
funcs = build_match_and_apply_functions(
pattern, search, replace)
self.cache.append(funcs)
return funcs
rules = LazyRules()
def plural(noun):
for matches_rule, apply_rule in rules:
if matches_rule(noun):
return apply_rule(noun)
if __name__ == '__main__':
import sys
if sys.argv[1:]:
print(plural(sys.argv[1]))
else:
print(__doc__)
我的问题是:复数(名词)函数中的对于matchs_rule,apply_rule在规则中:"循环如何满足if条件后何时退出?没有针对该条件的StopIteration命令.我希望for循环会继续进行,直到rules.cache完全迭代为止.
My question is: how does the 'for matches_rule, apply_rule in rules:' loop in the plural(noun) function know when to exit after fulfilling the if condition? There are no StopIteration commands for that condition. I would expect the for loop to continue until the rules.cache is iterated completely.
谢谢您的帮助!
推荐答案
return
语句在该点结束函数,将值返回给调用方.几乎在任何情况下都可以使用它(如果您具有try..except..else..finally
结构,即使return
语句也不会阻止执行finally
块).
The return
statement ends the function at that point, returning a value to the caller. This can be relied upon in almost any situation (if you have a try..except..else..finally
structure, even a return
statement won't prevent the finally
block from being executed).
这篇关于Dive Into Python 3中的迭代器示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!