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.
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']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With