¿Cuál es la diferencia entre la función normal y la función del generador?

Estoy tratando de entender la siguiente metodología,

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

Aquí mi investigación del código anterior, 26 es elgenerator() función y 27 es elnormal() función, cuando he asignadogenerator() función a la variable gen No he visto ningún mensaje de impresión comoGolpes de funciones del generador, Pero si he asignado elnormal() función de diversión variable, he visto el mensaje de impresión comogolpes de función normal. Mi pregunta eswhy generator() function not hit ?

Respuestas a la pregunta(2)

Su respuesta a la pregunta