SimplePrograms challenge
rzed
rzantow at gmail.com
Thu Jun 14 06:46:55 EDT 2007
Steven Bethard <steven.bethard at gmail.com> wrote in
news:466F27A3.8000106 at gmail.com:
> Steve Howell wrote:
>> --- George Sakkis <george.sakkis at gmail.com> wrote:
>>> from itertools import count, ifilter
>>> def sieve():
>>> seq = count(2)
>>> while True:
>>> p = seq.next()
>>> seq = ifilter(p.__rmod__, seq)
>>> yield p
> [snip]
>> Is there a way to broaden the problem somehow, so that
>> it can be a longer solution and further down on the
>> page, and so that I can continue to enforce my
>> somewhat arbitrary rule of ordering examples by how
>> long they are?
>
> How about we just comment it better?
>
> import itertools
>
> def iter_primes():
> # an iterator of all numbers between 2 and +infinity
> numbers = itertools.count(2)
>
> # generate primes forever
> while True
>
> # generate the first number from the iterator,
> # which should always be a prime
> prime = numbers.next()
> yield prime
>
> # lazily remove all numbers from the iterator that
> # are divisible by prime we just selected
> numbers = itertools.ifilter(prime.__rmod__, numbers)
>
> I think that's 17-ish, though you could shrink it down by
> removing some of the spaces.
>
> STeVe
How about including a driver? Generators are frustrating for
newbies (including oldies new to generators) because they don't
actually do anything unless you know how to use them. Given the
above, what's a newbie going to try first? Something like:
>>> iter_primes()
Hmmm. Doesn't do anything.
How about
>>> for ix in range(10):
... print iter_primes()
Not what you might expect.
Later:
>>> for ix in range(10):
... print iter_primes().next()
Hmmmmm....
... and so on.
In much of Python's documentation, and in this case, an occasional
working example of use would go FAR in aiding understanding of the
underlying concept.
--
rzed
More information about the Python-list
mailing list