On Mar 13, 6:04 pm, "Drew" <[EMAIL PROTECTED]> wrote:
> All -
Hi!

[snip]
> http://pastie.caboo.se/46647

There is no need for such a convoluted list comprehension as you
iterate over it immediately!  It is clearer to put the filtering logic
in the for loop.  Moreover you recalculate the regexp for each element
of the list.  Instead I would do something like this:

def find(search_str, flags=re.IGNORECASE):
    print "Contact(s) found:"
    search = re.compile(search_str, flags).search
    for name, contact in self.contacts.items():
        if search(name):
            print contact
    print

Although I would rather have one function that returns the list of all
found contacts:

def find(search_str, flags=re.IGNORECASE):
    search = re.compile(search_str, flags).search
    for name, contact in self.contacts.items():
        if search(name):
            yield contact

And then another one that prints it.

> Side note: I'm learning python after ruby experience. In ruby I would
> do something like:
>
> contacts.find_all{|name,contact| name =~ /search/}.each{|name,contact|
> puts contact}

And that's why you're right to learn Python ;)

HTH

--
Arnaud



-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to