On Wed, Feb 4, 2015 at 10:19 AM, Joel Goldstick <joel.goldst...@gmail.com> wrote:
> > > 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? > When you do rpt('hello',5)) you create an instance of rpt but you don't actually invoke it. maybe try: my_rpt_obj = obj(rpt('hello',5))() If I'm thinking straight, its the final () that actually cause your __call__ to happen. > >> 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 > -- Joel Goldstick http://joelgoldstick.com
-- https://mail.python.org/mailman/listinfo/python-list