switch recipe?
Sean 'Shaleh' Perry
shalehperry at attbi.com
Fri Jul 12 15:45:39 EDT 2002
On 12-Jul-2002 Mark McEahern wrote:
> In response to a question earlier today, I wrote a function I called
> make_color_switch:
>
> from __future__ import generators
>
> def make_color_switch(color1, color2):
> def color_switch():
> i = 0
> while True:
> if i % 2:
> yield color2
>
> It seemed like this could be more generic:
>
> from __future__ import generators
>
> def make_switch(*args):
> """Return a generator that loops through args."""
> if not args:
> raise RuntimeError("Missing parameter: args.")
> def switch():
> i = n = 0
> while True:
> i = n % len(args)
> yield args[i]
> n += 1
> return switch
>
out of curiosity, what happens when n reaches the end of the int/long/whatever
that stores it?
> Is switch a bad name for this? Can anyone suggest a better name? Other
> improvements? What I like about this code is it demonstrates several
> "advanced" features of Python, all the while retaining (imho) the simplicity
> and clarity Python is known for:
>
> generators
> nested scopes
> variable length argument arrays
> functions as objects
>
> Here's sample code that shows it used in the context of the original
> question:
>
while the above code is a nice sample, the below code should not be given to
people learning the language, it uses way too many tricks. Plus one letter
variable names are a pain.
> def colorize(s, *colors):
> switch = make_switch(*colors)()
> template = "<%(color)s><b>%(c)s</b></color>"
> l = []
> for c in s:
> color = switch.next()
> l.append(template % locals())
> print ''.join(l)
>
> colorize("testing", "black", "red", "green", "blue")
>
switch is an interesting idea, definately needs a new name.
More information about the Python-list
mailing list