¿Cómo uso la entrada de usuario para invocar una función en Python?

Tengo varias funciones como:

def func1(): print 'func1' def func2(): print 'func2' def func3(): print 'func3' 

Luego le pido al usuario que ingrese qué función quiere ejecutar usando choice = raw_input() y trato de invocar la función que elijan usando choice() . Si el usuario ingresa func1 en lugar de invocar esa función, me da un error que dice que 'str' object is not callable . ¿Es su modo de que yo convierta la “elección” en un valor exigible?

El error se debe a que los nombres de funciones no son cadenas que no se pueden llamar funciones como 'func1'() , debería ser func1() ,

Puedes hacer como:

 { 'func1': func1, 'func2': func2, 'func3': func3, }.get(choice)() 

Es mediante la asignación de cadena a las referencias de función

nota al margen : puedes escribir una función por defecto como:

 def notAfun(): print "not a valid function name" 

y mejorar su código como:

 { 'func1': func1, 'func2': func2, 'func3': func3, }.get(choice, notAfun)() 

Si creas un progtwig más complejo, probablemente sea más sencillo usar el módulo cmd de la biblioteca estándar de Python que escribir algo.
Tu ejemplo se vería así:

 import cmd class example(cmd.Cmd): prompt = ' ' def do_func1(self, arg): print 'func1 - call' def do_func2(self, arg): print 'func2 - call' def do_func3(self, arg): print 'func3 - call' example().cmdloop() 

y una sesión de ejemplo sería:

  func1 func1 - call  func2 func2 - call  func3 func3 - call  func *** Unknown syntax: func  help Undocumented commands: ====================== func1 func2 func3 help 

Cuando utilice este módulo, se llamará a todas las funciones llamadas do_* cuando el usuario ingrese el nombre sin do_ . También se generará automáticamente una ayuda y puede pasar argumentos a las funciones.

Para obtener más información sobre este aspecto en el manual de Python ( aquí ) o en la versión de Python 3 del manual para ver ejemplos ( aquí ).

Puedes usar locals

 >>> def func1(): ... print 'func1 - call' ... >>> def func2(): ... print 'func2 - call' ... >>> def func3(): ... print 'func3 - call' ... >>> choice = raw_input() func1 >>> locals()[choice]() func1 - call