Python - это динамически типизированный язык.тип переменной определяется во время выполнения и может изменяться во время выполнения.Вначале вы объявили a для хранения целочисленного типа, а затем присвоили ему функцию, и теперь ее тип стал функцией.
вы пытаетесь применить ' a 'в качестве аргумента функции range () , которая ожидает int arg, но вы фактически предоставили переменную функции в качестве аргумента.
исправленный код должен быть
a = int(raw_input('Give amount: '))
def fib():
a, b = 0, 1
while 1:
yield a
a, b = b, a + b
b = fib()
b.next()
for i in range(a):
print b.next(),
это будет работать