# Python Fibonacci Generator

## Python Fibonacci Generator

I would use this method:

Python 2

``````a = int(raw_input(Give amount: ))

def fib(n):
a, b = 0, 1
for _ in xrange(n):
yield a
a, b = b, a + b

print list(fib(a))
``````

Python 3

``````a = int(input(Give amount: ))

def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b

print(list(fib(a)))
``````

You are giving `a` too many meanings:

``````a = int(raw_input(Give amount: ))
``````

vs.

``````a = fib()
``````

You wont run into the problem (as often) if you give your variables more descriptive names (3 different uses of the name `a` in 10 lines of code!):

``````amount = int(raw_input(Give amount: ))
``````

and change `range(a)` to `range(amount)`.

#### Python Fibonacci Generator

Since you are writing a generator, why not use two yields, to save doing the extra shuffle?

``````import itertools as it

num_iterations = int(raw_input(How many? ))
def fib():
a,b = 0,1
while True:
yield a
b = a+b
yield b
a = a+b

for x in it.islice(fib(), num_iterations):
print x
``````

…..