¿Es ventajoso llamar a funciones de registro con formato de cadena + lista de args frente a formato en línea?Registro idiomático de Python: formato de cadena + lista de args vs. formato de cadena en línea - ¿cuál es el preferido?
que he visto (y escrito) código de registro que utiliza en línea el formato de cadenas:
logging.warn("%s %s %s" % (arg1, arg2, arg3))
y sin embargo yo supongo que es mejor (en cuanto al rendimiento, y más idiomática) a utilizar:
logging.warn("%s %s %s", arg1, arg2, arg3)
porque la segunda forma evita las operaciones de formateo de cadenas antes de invocar la función de registro. Si el nivel de registro actual filtra el mensaje de registro, no es necesario formatearlo, lo que reduce el tiempo de cálculo y las asignaciones de memoria.
¿Estoy en el camino correcto aquí o me he perdido algo?
Creo que está en el camino correcto. – mgilson
¿Tiene alguna referencia sobre el momento en que se realiza el formato de cadena en diferentes momentos? Hubiera esperado que ambos tuvieran lugar antes de que se realice la llamada a 'advertir'. No disputas lo que estás diciendo, solo curiosidad por saber más. – Levon
Bueno, en la primera forma, estamos formateando cadenas (* y * creación de tuplas) * antes * de la llamada a 'logging.warn' - en el segundo caso, solo estamos pasando una lista de argumentos a' logging.warn' (que es simplemente una creación tuple?) - por lo que evitamos una operación de formateo de cadenas en la invocación. Como mencioné en la pregunta, supongo que si el nivel de registro actual filtrara el mensaje de registro, no se realizaría ningún formateo, evitando de nuevo la operación de formateo de cadenas. Mi conjetura es esta * debería * ahorrar tiempo de procesamiento y asignaciones de memoria. – Inactivist