Ist es vorteilhaft, Logging-Funktionen mit Format String + Args List vs. Inline-Formatierung aufzurufen?Idiomatische Python-Protokollierung: Formatstring + Args-Liste vs. Inline-String-Formatierung - was wird bevorzugt?
Ich habe gesehen (und geschrieben) Logging-Code, die Inline-Formatierung von Zeichenfolge verwendet:
logging.warn("%s %s %s" % (arg1, arg2, arg3))
und doch gehe ich davon aus, es ist besser (Performance-weise, und mehr idiomatische) zu verwenden:
logging.warn("%s %s %s", arg1, arg2, arg3)
, weil die zweite Form vor dem Aufrufen der Protokollierungsfunktion Zeichenfolgenformatierungsoperationen vermeidet. Wenn die aktuelle Protokollierungsstufe die Protokollnachricht ausfiltert, ist keine Formatierung erforderlich, wodurch Rechenzeit und Speicherzuweisungen verringert werden.
Bin ich hier auf dem richtigen Weg, oder habe ich etwas verpasst?
Ich denke, Sie sind auf dem richtigen Weg. – mgilson
Haben Sie eine Referenz über das Timing der String-Formatierung, die zu unterschiedlichen Zeiten stattfindet? Ich hätte erwartet, dass beide vor dem Aufruf zu "warnen" stattfinden. Nicht bestreiten, was Sie sagen, nur neugierig, mehr zu erfahren. – Levon
Nun, in der ersten Form machen wir String-Formatierung (* und * Tuple-Erstellung) * vor * zum Aufruf von 'logging.warn' - im zweiten Fall übergeben wir nur eine Liste von Argumenten an' logging.warn' (was nur Tupel-Erstellung ist?) - so vermeiden wir eine String-Formatierung beim Aufruf. Wie ich in der Frage erwähnt habe, nehme ich an, dass, wenn die aktuelle Protokollierungsstufe die Protokollnachricht herausfiltern würde, keine Formatierung durchgeführt würde, was wiederum die Formatierung der Zeichenfolgen vermeidet. Meine Vermutung ist dies * sollte * Verarbeitungszeit und Speicherzuweisungen speichern. – Inactivist