Qual é a diferença entre função normal e função gerador?

Estou tentando entender a metodologia abaixo,

In [26]: def generator():
   ....:     print 'generator function hits'
   ....:     for i in range(3):
   ....:         yield i
   ....:         

In [27]: def normal():
   ....:     print 'normal function hits'
   ....:     return range(3)
   ....: 

In [28]: gen = generator()

In [29]: type(gen)
Out[29]: generator

In [30]: fun = normal()
normal function hits

In [31]: type(fun)
Out[31]: list

Aqui minha pesquisa do código acima, 26 é ogenerator() função e 27 é onormal() função, quando eu tiver atribuídogenerator() função para variável gen Eu não vi nenhuma mensagem de impressão comohits da função gerador, Mas se eu tiver atribuído onormal() função para variável divertida, eu vi a mensagem impressa comoacertos da função normal. Minha pergunta éwhy generator() function not hit ?

questionAnswers(2)

yourAnswerToTheQuestion