On Wed, Feb 4, 2015 at 9:32 AM, Chris Angelico <ros...@gmail.com> wrote:
> On Thu, Feb 5, 2015 at 12:23 AM, Neal Becker <ndbeck...@gmail.com> wrote: > > Now I want gen to be a callable that repeats N times. I'm thinking, this > > sounds perfect for yield > > > > class rpt: > > def __init__ (self, value, rpt): > > self.value = value; self.rpt = rpt > > def __call__ (self): > > for i in range (self.rpt): > > yield self.value > > > > so I would do: > > > > my_rpt_obj = obj (rpt ('hello', 5)) > > > > to repeat 'hello' 5 times (for example). > > > > But this doesn't work. when obj calls self.gen(), that returns a > generator, not > > the next value. > > > > How can I make this work? I can't change the interface of the existing > class > > obj, which expects a callable to get the next value. > Can you actually show your code and the traceback? > > So, if I understand you correctly, you want your rpt object to return > 'hello' five times to five consecutive calls? > > >>> a = rpt() > >>> a() > 'hello' > >>> a() > 'hello' > >>> a() > 'hello' > >>> a() > 'hello' > >>> a() > 'hello' > > You could do that with a generator by repeatedly calling next() on it, > or you could just keep track of the number of times you were called: > > class rpt: > def __init__ (self, value, rpt): > self.value = value; self.rpt = rpt > def __call__ (self): > if self.rpt: > self.rpt -= 1 > return self.value > # ... otherwise? > > Up to you to figure out what to do when self.rpt hits zero. > > ChrisA > -- > https://mail.python.org/mailman/listinfo/python-list > -- Joel Goldstick http://joelgoldstick.com
-- https://mail.python.org/mailman/listinfo/python-list