How best to write this if-else?
Alex Martelli
aleaxit at yahoo.com
Sat Apr 21 18:21:04 EDT 2001
"Ben Wolfson" <wolfson at uchicago.edu> wrote in message
news:dWmE6.638$E4.25725 at uchinews...
> In article <roy-D0E658.17013521042001 at news.panix.com>, "Roy Smith"
> <roy at panix.com> wrote:
>
> > What if I want to execute different code depending on which expression I
> > matched? Something along the lines of (pseudocode):
> >
> > if (m = e1.match(line)):
> > text1 = m.group(1)
> > do_complicated_processing (text1)
> > elif (m = e2.match(line)):
[snip]
> re_dispatch = {re.compile(blah):meaningful_name_1,
> re.compile(durh):meaningful_name_2
> ..etc
> }
> for re, func in re_dispatch.items():
Dictionaries have no guaranteed order, so, if the line
can match more than one re, it will be 'random' which
one gets matched. In general, you're better off with
a sequence of pairs, where you control the order:
re_dispatch = ( (re.compile(blah), meaningful_name_1),
(re.compile(durh), meaningful_name_2))
for re, func in re_dispatch:
Here you don't really need the dictionary's functionality
anyway, just a sequence of re->function pairs, so you
might as well use it even when order of re attempted is
not significant (it often is -- if not for correctness, as
when more than one re may match, then maybe for
speed, as trying likely-matching and/or simpler re's first
may make things faster).
Alex
More information about the Python-list
mailing list