Return value of an assignment statement?

Carl Banks pavlovevidence at gmail.com
Fri Feb 22 04:04:17 EST 2008


On Feb 21, 4:57 pm, mrstephengross <mrstevegr... at gmail.com> wrote:
> > What you can't do (that I really miss) is have a tree of assign-and-test
> > expressions:
> >         import re
> >         pat = re.compile('some pattern')
> >         if m = pat.match(some_string):
> >             do_something(m)
>
> Yep, this is exactly what I am (was) trying to do. Oh well.... Any
> clever ideas on this front?


Yeah, I got something clever.  I don't recommend using it, biut


def call_if_true(cond):
    if cond:
        return lambda func: func(cond)
    return lambda func: None


@call_if_true(re.match(r"name=(.*)"))
def set_name(m):
    name = m.group(1).strip()

@call_if_true(re.match(r"id=(.*)"))
def set_id(m):
    id = m.group(1).strip()

@call_if_true(re.match(r"phone=(.*)"))
def set_phone(m):
    phone = m.group(1).strip()



This decorator might be more to the point:

def call_if_match(regexp):
    m = re.match(regexp)
    if m:
        return lambda func: func(m)
    return lambda func: None



These have the drawback of being a little dense, and the functions
can't rebind variables in the caller's local namespace, but it is
clever.

P.S. I don't recommend using it.


Carl Banks



More information about the Python-list mailing list