Iterator example from Dive Into Python 3

2024/10/12 2:24:22

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 redef 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 = 0return selfdef __next__(self):self.cache_index += 1if len(self.cache) >= self.cache_index:return self.cache[self.cache_index - 1]if self.pattern_file.closed:raise StopIterationline = self.pattern_file.readline()if not line:self.pattern_file.close()raise StopIterationpattern, search, replace = line.split(None, 3)funcs = build_match_and_apply_functions(pattern, search, replace)self.cache.append(funcs)return funcsrules = LazyRules()def plural(noun):for matches_rule, apply_rule in rules:if matches_rule(noun):return apply_rule(noun)if __name__ == '__main__':import sysif sys.argv[1:]:print(plural(sys.argv[1]))else:print(__doc__)

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.

Thank you for the help!

Answer

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).

https://en.xdnf.cn/q/118250.html

Related Q&A

Getting a 500 Internal Server Error using render_template and Flask [duplicate]

This question already has answers here:How to debug a Flask app(13 answers)Comments not working in jinja2(2 answers)Closed 5 years ago.I am trying to use Flask to render an HTML template. I had it work…

Bokeh use of Column Data Source and Box_Select

Im lost as to how to set up a Column Data Source so that I can select points from one graph and have the corresponding points highlighted in another graph. I am trying to learn more about how this work…

How Does a Pyqtgraph Export for Three Subplots Look Like?

Using PyQtGraph, I would like to generate three sub plots in one chart and export this chart to a file.As I will repeat this a lot of times, it is quite performance sensitive. Therefore I do not need t…

Use class variables as instance vars?

What I would like to do there is declaring class variables, but actually use them as vars of the instance. I have a class Field and a class Thing, like this:class Field(object):def __set__(self, instan…

Get amount from django-paypal

I am using django-paypal to receive payment. I am currently paying as well as receiving payment using sandbox accounts. The payment procedure seems to be working fine. My problem is once I get back the…

Python get file regardless of upper or lower

Im trying to use this on my program to get an mp3 file regardless of case, and Ive this code:import glob import fnmatch, redef custom_song(name):for song in re.compile(fnmatch.translate(glob.glob("…

how to save h5py arrays with different sizes?

I am referring this question to this. I am making this new thread because I did not really understand the answer given there and hopefully there is someone who could explain it more to me. Basically my…

Cannot allocate memory on Popen commands

I have a VPS server with Ubuntu 11.10 64bit and sometimes when I execute a subprocess.Popen command I get am getting too much this error:OSError: [Errno 12] Cannot allocate memoryConfig details: For ea…

Python - find where the plot crosses the axhline on python plot

I am doing some analysis on some simple data, and I am trying to plot auto-correlation and partial auto-correlation. Using these plots, I am trying to find the P and Q value to plot in my ARIMA model.I…

remove tick labels in Python but keep gridlines

I have a Python script which is producing a plot consisting of 3 subplots all in 1 column.In the middle subplot, I currently have gridlines, but I want to remove the x axis tick labels.I have triedax2.…