Una función que llama a la función X

Básicamente quiero convertir un elemento de lista en una función con la función do. De esta manera, cualquier función preescrita a la que pueda llamar con solo usar do (lista [x]).

Lo que estoy tratando de hacer es una función que quita las comillas de un elemento de lista y luego ejecuta la función que está en ese elemento de lista.


def func(): print "python" def func1(): print "is" def func2(): print "awesome" def do(fun): fun() #I think the problem is here funs = ['func()','func1()','func2()'] print ''.join(funs[0]) do(''.join(funs[0])) 

Editar:

Lo que estoy tratando de hacer es una función que quita las comillas de un elemento de lista y luego ejecuta la función que está en ese elemento de lista

No necesita las funciones adicionales, y tampoco necesita convertirlas en una cadena:

 def func(): print "python" def func1(): print "is" def func2(): print "awesome" funcs = [func, func1, func2] for function in funcs: function() 

Bueno, básicamente funciona así. Tenga en cuenta que la lista contiene las funciones en sí, no una cadena.

 def func(): print "python" def func1(): print "is" def func2(): print "awesome" def do(fun): fun() funcs = [func, func1, func2] for function in funcs: do(function) 

Salida:

 python is awesome 

EDITAR: Si desea que la lista contenga los nombres de las funciones como cadenas, use eval() :

 funcs = ['func', 'func1', 'func2'] for function in funcs: do(eval(function)) 

Si realmente desea ejecutar funciones con nombres arbitrarios de una lista de nombres en el ámbito global / módulo actual , esto hará:

NB: Esto NO utiliza el eval() potencialmente inseguro y peligroso:

Ejemplo:

 def func(): return "python" def func1(): return "is" def func2(): return "awesome" def do(func_name, *args, **kwargs): f = globals().get(func_name, lambda : None) if callable(f): return f(*args, **kwargs) funs = ["func", "func1", "func2"] print "".join(funs[0]) print "".join(map(do, funs)) 

Salida:

 $ python foo.py func pythonisawesome 

También puedes llamar individualmente funciones “nombradas”:

 >>> do(funs[0]) python 

Tenga en cuenta la implementación de do() . Esto también podría aplicarse más genéricamente en objetos y otros módulos que también intercambian búsquedas globals() .

Como las personas anteriores han dicho que la mejor manera es definir un diccionario de funciones, ya que las funciones son objetos en python, esto es posible

 def One(): pass def Two(): pass functions = {"ONE":One, "TWO":Two} 

Entonces puedes llamarlo así:

 functions[input]() 

Si desea darle un verdadero control al usuario (Y NO recomiendo hacerlo) podría usar la función eval.

 eval(input+"()")