[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Re: isgenerator(...) - anywhere to be found?

exarkun

1/22/2008 2:35:00 PM

On Tue, 22 Jan 2008 15:15:43 +0100, "Diez B. Roggisch" <deets@nospam.web.de> wrote:
>Jean-Paul Calderone wrote:
>
>> On Tue, 22 Jan 2008 14:20:35 +0100, "Diez B. Roggisch"
>> <deets@nospam.web.de> wrote:
>>>For a simple greenlet/tasklet/microthreading experiment I found myself in
>>>the need to ask the question
>>>
>>> [snip]
>>
>> Why do you need a special case for generators? If you just pass the
>> object in question to iter(), instead, then you'll either get back
>> something that you can iterate over, or you'll get an exception for
>> things that aren't iterable.
>
>Because - as I said - I'm working on a micro-thread thingy, where the
>scheduler needs to push returned generators to a stack and execute them.
>Using send(), which rules out iter() anyway.

Sorry, I still don't understand. Why is a generator different from any
other iterator?

Jean-Paul
3 Answers

Diez B. Roggisch

1/22/2008 2:52:00 PM

0

Jean-Paul Calderone wrote:

> On Tue, 22 Jan 2008 15:15:43 +0100, "Diez B. Roggisch"
> <deets@nospam.web.de> wrote:
>>Jean-Paul Calderone wrote:
>>
>>> On Tue, 22 Jan 2008 14:20:35 +0100, "Diez B. Roggisch"
>>> <deets@nospam.web.de> wrote:
>>>>For a simple greenlet/tasklet/microthreading experiment I found myself
>>>>in the need to ask the question
>>>>
>>>> [snip]
>>>
>>> Why do you need a special case for generators? If you just pass the
>>> object in question to iter(), instead, then you'll either get back
>>> something that you can iterate over, or you'll get an exception for
>>> things that aren't iterable.
>>
>>Because - as I said - I'm working on a micro-thread thingy, where the
>>scheduler needs to push returned generators to a stack and execute them.
>>Using send(), which rules out iter() anyway.
>
> Sorry, I still don't understand. Why is a generator different from any
> other iterator?

Because you can use send(value) on it for example. Which you can't with
every other iterator. And that you can utizilize to create a little
framework of co-routines or however you like to call it that will yield
values when they want, or generators if they have nested co-routines the
scheduler needs to keep track of and invoke after another.

I'm currently at work and can't show you the code - I don't claim that my
current approach is the shizzle, but so far it serves my purposes - and I
need a isgenerator()

Diez

Steven Bethard

1/22/2008 6:28:00 PM

0

Diez B. Roggisch wrote:
> Jean-Paul Calderone wrote:
>
>> On Tue, 22 Jan 2008 15:15:43 +0100, "Diez B. Roggisch"
>> <deets@nospam.web.de> wrote:
>>> Jean-Paul Calderone wrote:
>>>
>>>> On Tue, 22 Jan 2008 14:20:35 +0100, "Diez B. Roggisch"
>>>> <deets@nospam.web.de> wrote:
>>>>> For a simple greenlet/tasklet/microthreading experiment I found myself
>>>>> in the need to ask the question
>>>>>
>>>>> [snip]
>>>> Why do you need a special case for generators? If you just pass the
>>>> object in question to iter(), instead, then you'll either get back
>>>> something that you can iterate over, or you'll get an exception for
>>>> things that aren't iterable.
>>> Because - as I said - I'm working on a micro-thread thingy, where the
>>> scheduler needs to push returned generators to a stack and execute them.
>>> Using send(), which rules out iter() anyway.
>> Sorry, I still don't understand. Why is a generator different from any
>> other iterator?
>
> Because you can use send(value) on it for example. Which you can't with
> every other iterator. And that you can utizilize to create a little
> framework of co-routines or however you like to call it that will yield
> values when they want, or generators if they have nested co-routines the
> scheduler needs to keep track of and invoke after another.

So if you need the send() method, why not just check for that::

try:
obj.send
except AttributeError:
# not a generator-like object
else:
# is a generator-like object

Then anyone who wants to make an extended iterator and return it can
expect it to work just like a real generator would.

STeVe

TezZ Da Sp@cE MaN

1/23/2008 6:42:00 AM

0



-----Original Message-----
From: python-list-bounces+dhwani006=gmail.com@python.org
[mailto:python-list-bounces+dhwani006=gmail.com@python.org] On Behalf Of
Diez B. Roggisch
Sent: 22 January 2008 20:22
To: python-list@python.org
Subject: Re: isgenerator(...) - anywhere to be found?

Jean-Paul Calderone wrote:

> On Tue, 22 Jan 2008 15:15:43 +0100, "Diez B. Roggisch"
> <deets@nospam.web.de> wrote:
>>Jean-Paul Calderone wrote:
>>
>>> On Tue, 22 Jan 2008 14:20:35 +0100, "Diez B. Roggisch"
>>> <deets@nospam.web.de> wrote:
>>>>For a simple greenlet/tasklet/microthreading experiment I found myself
>>>>in the need to ask the question
>>>>
>>>> [snip]
>>>
>>> Why do you need a special case for generators? If you just pass the
>>> object in question to iter(), instead, then you'll either get back
>>> something that you can iterate over, or you'll get an exception for
>>> things that aren't iterable.
>>
>>Because - as I said - I'm working on a micro-thread thingy, where the
>>scheduler needs to push returned generators to a stack and execute them.
>>Using send(), which rules out iter() anyway.
>
> Sorry, I still don't understand. Why is a generator different from any
> other iterator?

Because you can use send(value) on it for example. Which you can't with
every other iterator. And that you can utizilize to create a little
framework of co-routines or however you like to call it that will yield
values when they want, or generators if they have nested co-routines the
scheduler needs to keep track of and invoke after another.

I'm currently at work and can't show you the code - I don't claim that my
current approach is the shizzle, but so far it serves my purposes - and I
need a isgenerator()

Diez
--
http://mail.python.org/mailman/listinfo/p...