Python Forum
Generator function for even numbers
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Generator function for even numbers
#1
I am trying to write a generator function to output even numbers

Here is my code:

def evenNumber(i):
    r = i * 2
    yield r


for i in range(1,21):
    print(evenNumber(i))
However, this is what I get which is not what I want.

<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
<generator object evenNumber at 0x00F7BDB0>
[Finished in 0.145s]
Reply
#2
You need to iterate over the generator, r.g. in a for loop or list comprehension, so that the calculation is run.
Reply
#3
The generator should written like this example:

def number_gen(start=0, step=1):
    while True:
        yield start
        start += step
It's an infinite generator, which means it has no exit condition.
Consuming this generator, requires for islice from itertools.

Consuming:
from itertools import islice


for number in islice(number_gen(start=0, step=2), 0, 10):
    print(number)
The number_gen code is not required, because it's in itertools.count.
Also the range object is very powerful and could solve your task if you need finite sequences.

even_numbers = list(range(0, 257, 2))
print(even_numbers)
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply
#4
ok thanks.
this is now working.

def evenNumber(s):
    b = 1
    while b <= s:
        yield b*2
        b += 1

for i in evenNumber(20):
    print(i)
Reply
#5
it's better as
def even_numbers(end):
    for num in range(1, end + 1):
        yield numb * 2
you can pass optional argument for start too
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  prime numbers with iterator and generator cametan_001 8 1,861 Dec-17-2022, 02:41 PM
Last Post: cametan_001
  Tuple generator, and function/class syntax quazirfan 3 3,859 Aug-10-2021, 09:32 AM
Last Post: buran
  list call problem in generator function using iteration and recursive calls postta 1 1,891 Oct-24-2020, 09:33 PM
Last Post: bowlofred
  basic random number generator in replace function krug123 2 2,032 Jul-31-2020, 01:02 PM
Last Post: deanhystad
  How to make this function general to create binary numbers? (many nested for loops) dospina 4 4,401 Jun-24-2020, 04:05 AM
Last Post: deanhystad
  len() function, numbers doesn't work with Geany Editor Penguin827 3 2,990 May-08-2020, 04:08 AM
Last Post: buran
  how to make my function be a generator Skaperen 2 2,023 Jan-27-2020, 01:07 AM
Last Post: Skaperen
  Can i prevent the random generator to generate already used numbers? MauserMan 3 2,856 Jan-05-2020, 04:44 PM
Last Post: MauserMan
  generator function that yield from a list buran 9 4,167 Jun-04-2019, 10:26 PM
Last Post: snippsat
  Print Numbers starting at 1 vertically with separator for output numbers Pleiades 3 3,718 May-09-2019, 12:19 PM
Last Post: Pleiades

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020