converting from perl: variable sized unpack

Roy Smith roy at panix.com
Mon Jul 16 09:30:13 EDT 2001


Alex Martelli <aleaxit at yahoo.com> wrote:
> I find I can rarely throw away the match-objects in this cavalier
> way, because they carry much, often-needed information -- so, I
> don't get to use this idiom anyway.  Rather, I have to code:
>
>    mo = re1.match(thestring)
>    if mo:
>        dostuff(mo)
>    else:
>        mo = re2.match(thestring)
>        if mo:
>            dootherstuff(mo)
>        else:
>            mo = re3.match(thestring)
>            if mo:
>                etcetcetc(mo)
>            else:
>                nomatchatall()
>
>which is hardly elegant and clean.

No it's not, but the problem is not that match returns None, the
problem is that Python doesn't allow assignment as a side effect.
Imagine if you could write it this way:

    if mo = re1.match(thestring)
        dostuff(mo)
    elif mo = re2.match(thestring)
        dootherstuff(mo)
    elif mo = re3.match(thestring)
        etcetcetc(mo)
    else:
        nomatchatall()

Wouldn't that be elegant and clean and obvious?

After 4 years of using Python, I still find the lack of any way to do
an atomic "assign and test" unbelievably constraining.




More information about the Python-list mailing list