On Dec 23, 2:39 pm, "Terry Reedy" <[EMAIL PROTECTED]> wrote:
> "John Machin" <[EMAIL PROTECTED]> wrote in message
>
> news:[EMAIL PROTECTED]
> | On Dec 23, 5:38 am, "Terry Reedy" <[EMAIL PROTECTED]> wrote:
> | > 'Most flexible' in a different way is
> | >
> | > def searcher(rex):
> | >     crex = re.compile(rex)
> | >     def _(txt):
> | >         return crex.search(txt)
> | >     return _
> | >
> |
> | I see your obfuscatory ante and raise you several dots and
> | underscores:
>
> I will presume you are merely joking, but for the benefit of any beginning
> programmers reading this, the closure above is a standard functional idiom
> for partial evaluation of a function (in this this, re.search(crex,txt))
>
> | class Searcher(object):
> |    def __init__(self, rex):
> |        self.crex = re.compile(rex)
> |    def __call__(self, txt):
> |        return self.crex.search(txt)
>
> while this is, the equivalent OO version.  Intermdiate Python programmers
> should know both.
>

Semi-joking; I thought that your offering of this:

def searcher(rex):
    crex = re.compile(rex)
    def _(txt):
        return crex.search(txt)
    return _
foo_searcher = searcher('foo')

was somewhat over-complicated, and possibly slower than already-
mentioned alternatives. The standard idiom etc etc it may be, but the
OP was interested in getting overhead out of his re searching loop.
Let's trim it a bit.

step 1:
def searcher(rex):
    crexs = re.compile(rex).search
    def _(txt):
        return crexs(txt)
    return _
foo_searcher = searcher('foo')

step 2:
def searcher(rex):
    return re.compile(rex).search
foo_searcher = searcher('foo')

step 3:
foo_searcher = re.compile('foo').search

HTH,
John
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to