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.

Llamando a una función en un bucle de otra función.

Antecedentes – Tengo una función que toma una respuesta de API (api_response) de otra función (api_response = api_call()). Bloque de código #1 sigue iterando hasta que esté presente meta en la respuesta. Una vez que meta esté en api_response, entonces Bloque de código #2 devolverá api_response.

Problema – aunque mi código está probando api_response para meta, no he encontrado una manera de incluir la llamada continua de la otra función (api_response = api_call()) en mi bucle while, lo cual permitiría determinar cuándo meta todavía está presente en api_response.

Función

def desempaquetar_respuesta():
    # Bloque de código #1
    api_response = api_call()
    while "meta" not in api_response:
        id_value = "id"
        res1 = [val[id_value] for key, val in api_response.items() if id_value in val]
        id_value = "".join(res1)
        percent_value = "percent_complete"
        res2 = (tuple(api_response["data"]["attributes"].get("percent_complete", '') for key, val in api_response.items()))
        print(f'¡Sus datos solicitados, asociados con la ID: {id_value}, están {res2} completos!')
    # Bloque de código #2
    if "meta" in api_response:
        return api_response
desempaquetar_respuesta()

Pregunta – ¿alguien tiene algún consejo sobre cómo puedo integrar api_response en mi bucle, para que se siga llamando en cada iteración del bucle?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución para llamar continuamente a la función api_call() y actualizar la variable api_response es mover el código que asigna api_response al comienzo del bucle while. De esta manera, en cada iteración del bucle, se llama nuevamente a la función api_call() y se recibe una nueva respuesta que se asigna a api_response. La función unpack_response() actualizada se vería así:

    def unpack_response():
        while True:
            api_response = api_call()
            if "meta" in api_response:
                return api_response
            else:
                id_value = "id"
                res1 = [val[id_value] for key, val in api_response.items() if id_value in val]
                id_value = "".join(res1)
                percent_value = "percent_complete"
                res2 = (tuple(api_response["data"]["attributes"].get("percent_complete", '') for key, val in api_response.items()))
                print(f' ¡Los datos solicitados, asociados con el ID: {id_value}, están completos en un {res2}!')
    

    En esta función actualizada, el bucle while se ejecutará indefinidamente hasta que se reciba una respuesta que contenga “meta”, momento en el cual la función devolverá la respuesta. En cada iteración del bucle, se llamará a la función api_call() y se asignará la nueva respuesta a api_response.

    Al mover el código que asigna api_response dentro del bucle while, la función llamará continuamente a la otra función y permitirá determinar cuándo meta aún está en api_response.

Comments are closed.