basic generator question

Joel Goldstick joel.goldstick at gmail.com
Wed Feb 4 10:25:41 EST 2015


On Wed, Feb 4, 2015 at 10:19 AM, Joel Goldstick <joel.goldstick at gmail.com>
wrote:

>
>
> On Wed, Feb 4, 2015 at 9:32 AM, Chris Angelico <rosuav at gmail.com> wrote:
>
>> On Thu, Feb 5, 2015 at 12:23 AM, Neal Becker <ndbecker2 at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20150204/fe8ef9e1/attachment.html>


More information about the Python-list mailing list