Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove duplicated codes from a generator in Python

Tags:

python

def generator():
    for i in range(10):
        yield "foo" + "baz"

    for i in range(10):
        yield "bar" + "baz"

I want to make the code like this:

def baz(s):
    for i in range(10):
        yield s + "baz"

def generator():
    baz("foo")
    baz("bar")

However, this code behaves differently.

How can I get rid of duplicated code including yield in a generator?

P.S. I found yield from. It's exactly which I want, but my project is in Python 2.7.

like image 243
173210 Avatar asked Apr 08 '26 03:04

173210


1 Answers

You could recode to use itertools as follows:

from itertools import repeat, chain

def generator():
    for i in chain(repeat('foobaz', 10), repeat('barbaz', 10)):
        yield i

for x in generator():
    print x

Giving you:

foobaz
foobaz
foobaz
foobaz
foobaz
foobaz
foobaz
foobaz
foobaz
foobaz
barbaz
barbaz
barbaz
barbaz
barbaz
barbaz
barbaz
barbaz
barbaz
barbaz

Or as a simple list:

from itertools import repeat, chain

def generator():
    return list(chain(repeat('foobaz', 10), repeat('barbaz', 10)))

print generator()

Giving:

['foobaz', 'foobaz', 'foobaz', 'foobaz', 'foobaz', 'foobaz', 'foobaz', 'foobaz', 'foobaz', 'foobaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz', 'barbaz']
like image 66
Martin Evans Avatar answered Apr 10 '26 17:04

Martin Evans



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!