By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,097 Members | 1,529 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,097 IT Pros & Developers. It's quick & easy.

copying generatrors

P: n/a
Does anyone have code to copy a generator?

Here is what I'd like to do:

def foo():
yield 1
yield 2
yield 3

f = foo()
g = copy(foo)

print f.next()
1
print f.next()
2

print g.next()
1

Thanks,

Horace
Jun 5 '07 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Why not just do this:
>>def foo():
.... yield 1
.... yield 2
.... yield 3
....
>>f = foo()
g = foo()
f.next()
1
>>f.next()
2
>>f.next()
3
>>g.next()
1
>>g.next()
2
>>g.next()
3

Jun 5 '07 #2

P: n/a
My example wasn't very good. Here's another try:

def foo():
yield 1
yield 2
yield 3

f = foo()
f.next()
1

g=copy(f) # copy the generator after an iteration

f.next()
2
f.next()
3

g.next()
2

I want to copy the generator's state after one or more iterations.

In article <11**********************@o11g2000prd.googlegroups .com>,
Matimus <mc******@gmail.comwrote:
Why not just do this:
>def foo():
... yield 1
... yield 2
... yield 3
...
>f = foo()
g = foo()
f.next()
1
>f.next()
2
>f.next()
3
>g.next()
1
>g.next()
2
>g.next()
3
Jun 6 '07 #3

P: n/a
Horace Enea wrote:
My example wasn't very good. Here's another try:

def foo():
yield 1
yield 2
yield 3

f = foo()
f.next()
1

g=copy(f) # copy the generator after an iteration

f.next()
2
f.next()
3

g.next()
2

I want to copy the generator's state after one or more iterations.
You could use itertools.tee():
>>def foo():
.... yield 1
.... yield 2
.... yield 3
....
>>import itertools
f = foo()
f.next()
1
>>f, g = itertools.tee(f)
f.next()
2
>>f.next()
3
>>g.next()
2
>>g.next()
3

But note that if your iterators get really out of sync, you could have a
lot of elements stored in memory.

STeVe
Jun 6 '07 #4

P: n/a
Steve,

Hey, thanks. I'll try that.

Horace

In article <-J******************************@comcast.com>,
Steven Bethard <st************@gmail.comwrote:
Horace Enea wrote:
My example wasn't very good. Here's another try:

def foo():
yield 1
yield 2
yield 3

f = foo()
f.next()
1

g=copy(f) # copy the generator after an iteration

f.next()
2
f.next()
3

g.next()
2

I want to copy the generator's state after one or more iterations.

You could use itertools.tee():
>>def foo():
... yield 1
... yield 2
... yield 3
...
>>import itertools
>>f = foo()
>>f.next()
1
>>f, g = itertools.tee(f)
>>f.next()
2
>>f.next()
3
>>g.next()
2
>>g.next()
3

But note that if your iterators get really out of sync, you could have a
lot of elements stored in memory.

STeVe
Jun 6 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.