Python code written in 1998, how to improve/change it?

Bengt Richter bokr at oz.net
Thu Jan 26 11:21:53 CET 2006


On Wed, 25 Jan 2006 15:50:27 -0600, skip at pobox.com wrote:

> 
>    >> If they need to resume their calculations from where they left off
>    >> after the last yield.
>
>    Wolfgang> Well, no, independently from that.
>
>    Wolfgang> Just to avoid to inital overhead of the function call.
>
>How do you pass in parameters?  Consider:
>
>    def square(x):
>        return x*x
>
>vs
>
>    def square(x)
>        while True:
>            yield x*x
>
>How do you get another value of x into the generator?
>
>    >>> def square(x):
>    ...   while True:
>    ...     yield x*x
>    ...
>    >>> g = square(2)
>    >>> g
>    <generator object at 0x3b9d28>
>    >>> g.next()
>    4
>    >>> g.next()
>    4
>    >>> g.next(3)
>    Traceback (most recent call last):
>      File "<stdin>", line 1, in <module>
>    TypeError: expected 0 arguments, got 1
>
 >>> def square(xbox):
 ...     while True: yield xbox[0]*xbox[0]
 ...
 >>> xbox = [3]
 >>> g = square(xbox)
 >>> g.next()
 9
 >>> xbox[0]=4
 >>> g.next()
 16
 >>> [g.next() for xbox[0] in xrange(10)]
 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

One way to answer your question literally,
whatever it may do to your gag reflex ;-)

Regards,
Bengt Richter



More information about the Python-list mailing list