Re: Can this be written more concisely in a functional style
From: Jeremy Fincher (tweedgeezer_at_hotmail.com)
Date: 11/18/03
- Next message: Irmen de Jong: "Re: pros and cons of Tkinter in comparison with other GUI toolboxes, please?"
- Previous message: John Benson: "pros and cons of Tkinter in comparison with other GUI toolboxes, please?"
- In reply to: Michele Simionato: "Re: Can this be written more concisely in a functional style"
- Next in thread: Alexander Schmolck: "Re: Can this be written more concisely in a functional style"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: 18 Nov 2003 13:04:33 -0800
mis6@pitt.edu (Michele Simionato) wrote in message news:<2259b0e2.0311180714.4f605bab@posting.google.com>...
> tweedgeezer@hotmail.com (Jeremy Fincher) wrote in message news:<698f09f8.0311180259.bdd4359@posting.google.com>...
> > def any(p, seq):
> > """Returns true if any element in seq satisfies predicate p."""
> > for elt in itertools.ifilter(p, seq):
> > return True
> > else:
> > return False
> >
> > def all(p, seq):
> > """Returns true if all elements in seq satisfy predicate p."""
> > for elt in itertools.ifilterfalse(p, seq):
> > return False
> > else:
> > return True
>
> This is a perfect example of why I dislike the "else" clause. I
> would code this as
>
> def any(p, seq):
> """Returns true if any element in seq satisfies predicate p."""
> for elt in itertools.ifilter(p, seq):
> return True
> return False
>
> def all(p, seq):
> """Returns true if all elements in seq satisfy predicate p."""
> for elt in itertools.ifilterfalse(p, seq):
> return False
> return True
>
> Since the "else" is unnecessary, it disturbs me, I get confused,
> I don't see why it is used (there is no break in the loop)
It's used because the for loop is effectively serving as an if
statement. Iterators have no __nonzero__ method -- you can't simply
bool() them. So I use a for loop like a if statement, and throw the
else in there to emphasize that usage. The for loop will never
iterate; either its body executes or it doesn't.
An alternative way to code this would be:
def any(p, seq):
try:
itertools.ifilter(p, seq).next()
return True
except StopIteration:
return False
but I find that less clear.
I also use else because it puts my return statements at the same level
of indentation, which I find more readable, since logically they're
equivalent.
> Am I the only one? ;)
One can only hope! <wink>
Jeremy
- Next message: Irmen de Jong: "Re: pros and cons of Tkinter in comparison with other GUI toolboxes, please?"
- Previous message: John Benson: "pros and cons of Tkinter in comparison with other GUI toolboxes, please?"
- In reply to: Michele Simionato: "Re: Can this be written more concisely in a functional style"
- Next in thread: Alexander Schmolck: "Re: Can this be written more concisely in a functional style"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|