
a b und c enthalten strings.
d=a+b+c besser als # Variante 1 d="{}{}{}".format(a,b,c) ? # Variante 2
Die zweite Variante ist das übliche Idiom, wenn es um die Kombination von Strings geht.
Wirklich? Himmel hilf! Das wäre wirklich die letzte Version, die mir einfallen würde - nicht nur, weil ich, der ich die Flexibilität der format-Methode praktisch nie benötige, diese selten verwende. PEP 20.2, "Explicit is better than implicit." PEP 20.3, "Simple is better than complex." Wenn ich drei Variablen habe, von denen ich weiß, daß es Strings sind, verwende ich keinen Code, der auch beliebigen anderen Input stillschweigend (implizit) konvertiert. Wenn ich addieren will, addiere ich. Von daher spricht nichts gegen Variante 1: d = a + b + c PEP 20.7, "Readability counts." Variante 1 ist prima lesbar, aber möglicherweise besteht tatsächlich ds Bedürfnis, dem Leser zu "beweisen", daß das Ergebnis ein String ist. Dann erfüllt die "Variante 3" den Zweck: d = ''.join([a, b, c]) (die sich auch immer für inkrementell zusammengebaute Strings anbietet). Sie hat den weiteren Vorteil, daß sie fehlschlägt, wenn eine der Eingabevariablen kein String ist: PEP 20.10, "Errors should never pass silently." Ich kann sogar die Lesbar- und auch Änderbarkeit noch auf die Spitze treiben: d = ''.join([a, # Erklärung des ganz woanders erzeugten Wertes a b, # dto. für b c, # dto. für c ]) Dies ist sehr leicht änderbar, wenn ein Element hinzukommt, geändert wird oder entfällt. Vergleichs-Tools arbeiten zeilenorientiert. Die "Variante 3" konvertiert Nicht-Strings stillschweigend. Was aber, wenn ich ganz selbstverständlich davon ausgehe, daß es Strings sind, und eine Abweichung hiervon ein sicheres Zeichen für einen Fehler ist? Ich verplempere nicht nur eine Menge Rechenzeit, sondern verberge auch noch den Fehler: PEP 20.10, "Errors should never pass silently." Wenn ich die implizite String-Konversion will, kann ich das auch so erreichen: d = ''.join(map(str, [a, b, c])) Damit weise ich darauf hin, daß ich damit rechne, daß die Eingabewerte möglicherweise keine Strings sind, aber in solche konvertiert werden können: PEP 20.11, "Unless explicitly silenced." Schlußendlich hat Variante 2 noch einen weiteren Nachteil: sie ist umständlich zu ändern. Wenn sich die Anzahl der zu verkettenden Strings ändert, muß sowohl ein "{}" hinzugefügt oder gelöscht *als auch* die eigentliche Änderung vorgenommen werden. Bei drei Argumenten mag das gerade noch vertretbar sein; aber schon bei wenig mehr fängt die Zählerei an. Also, ganz eindeutig: Variante 1 oder 3, aber keinesfalls 2. -- Schönen Gruß, Tobias