es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear funciones de manera dinámica en Python

Estoy tratando de crear un intérprete de código escrito en algún lenguaje en Python y actualmente me encuentro atascado en la interpretación de funciones. Parece que hay una forma de crear clases dinámicamente con algo como MyClass = type("MyClass", (object, ), dict()), pero no puedo encontrar una forma de crear funciones. Tengo una idea de traducción directa de línea a línea del código en código Python y ejecución, pero eso no es realmente lo que quiero hacer. Entonces, ¿hay alguna forma de crear funciones dinámicamente o lo mejor que puedo obtener es algo como:

foo_code = compile('def foo(): return "bar"', "<string>", "exec")
foo_func = FunctionType(foo_code.co_consts[0], globals(), "foo")

¿con necesidad de traducción?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Python, puedo sugerir el siguiente enfoque para crear funciones de forma dinámica en Python:

    Puedes usar la función incorporada exec() para ejecutar una cadena que contiene la definición de la función. Aquí tienes un ejemplo:

    def create_function(name, args, body):
        # Crear una cadena que contenga la definición de la función
        func_def = "def {}({}):{}\n".format(name, args, body)
    
        # Ejecutar la cadena usando exec() y el diccionario locals()
        exec(func_def, locals())
    
        # Obtener el objeto de la función creada del diccionario locals()
        return locals()[name]
    

    Puedes usar esta función para crear una función de forma dinámica de esta manera:

    # Llamar a create_function() para crear una función 'foo'
    foo = create_function('foo', '', 'return "bar"')
    
    # Llamar a la función creada 'foo'
    print(foo())
    

    Esto producirá la siguiente salida:

    bar
    

    Ten en cuenta que este enfoque no se recomienda en general, ya que la creación dinámica de funciones puede propiciar errores y ser difícil de mantener. Por lo general, es mejor utilizar un enfoque más estructurado, como definir las funciones en un módulo separado e importarlas según sea necesario.

Comments are closed.