> The more trivial the example, the harder it is to see the advantage. I absoultely agree. Thanks for pointing me out to some real-world code. However, the function you pointed me to is not a generator (there is no yield statement... it just returns the entire list of primes). A generator version would be:
>>> def primes(n): ... if n<2: yield [] ... s=range(3,n+1,2) ... mroot = n ** 0.5 ... half=(n+1)/2-1 ... i=0 ... m=3 ... while m <= mroot: ... if s[i]: ... j=(m*m-3)/2 ... s[j]=0 ... while j<half: ... s[j]=0 ... j+=m ... i=i+1 ... m=2*i+3 ... yield 2 ... for x in s: ... if x: yield x ... >>> x = primes(11) >>> x.next() 2 >>> x.next() 3 >>> x.next() 5 >>> x.next() 7 >>> x.next() 11 >>> x.next() Traceback (most recent call last): File "<stdin>", line 1, in ? StopIteration >>> Danny Colligan On Nov 16, 10:49 am, "Richard Brodie" <[EMAIL PROTECTED]> wrote: > "Danny Colligan" <[EMAIL PROTECTED]> wrote in messagenews:[EMAIL PROTECTED] > > > Now that we're on the subject, what are the advantages of using > > generators over, say, list comprehensions or for loops? It seems to me > > that virtually all (I won't say everything) the examples I've seen can > > be done just as easily without using generators.The more trivial the > > example, the harder it is to see the advantage. > Suppose you wanted to sum the first 10000 primes. A quick Google > fins you Wensheng Wang's > recipe:http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/366178 > Just add print sum(primes(10000)), and you're done. -- http://mail.python.org/mailman/listinfo/python-list