Boolean value of generators

Steven D'Aprano steve at
Fri Oct 15 04:21:54 CEST 2010

On Thu, 14 Oct 2010 14:43:29 -0400, Albert Hopkins wrote:

> There may be times, however, that a generator may "know" that it
> doesn't/isn't/won't generate any values, and so you may be able to
> override boolean evaluation.  Consider this example:
[snip example]

This is a good example, but it's not a generator, it's an iterator :)

The two are similar in that they both produce values lazily, as required, 
but generators are a special case of iterators: generators are a special 
form of the function syntax which returns a lightweight and simple 
iterator. Iterators are more general. They're an interface rather than a 
type, so any class you build which matches the iterator protocol is an 
iterator, but only a function with a yield is a generator. 

Other than this nit-pic, your idea of making a custom iterator with a 
__nonzero__ method is an excellent idea.


More information about the Python-list mailing list