Re: [Python-de] strings zusammensetzen.

"Tobias Herp" <tobias.herp@gmx.de> writes:
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 hängt IMO stark vom Use-Case ab. Oft hat man z.B. solche String-Concatenierungen im Zusammenhang mit der Erstellung von Dateinamen. Und da wäre es besser, ein Template zu verwenden -- genau im Sinne von "explizit ist besser als implizit": d = "{base}{revision}{suffix}".format(base = a, revision = b, suffix = c) Allgemein würde ich, wenn es sich um Strings handelt, immer genau schauen, ob man nicht eigentlich ein Template füllen möchte, das nur gerade zufällig sehr einfach ausfällt. Schöne Grüße Ole

Оlе Ѕtrеісhеr schrieb am 25.08.2017 um 10:47:
"Tobias Herp" <tobias.herp@gmx.de> writes:
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 hängt IMO stark vom Use-Case ab. Oft hat man z.B. solche String-Concatenierungen im Zusammenhang mit der Erstellung von Dateinamen. Und da wäre es besser, ein Template zu verwenden -- genau im Sinne von "explizit ist besser als implizit":
Nur dadurch, daß etwas umständlich programmiert ist, wird es noch nicht expliziter. Und umständlich ist es, wenn man zum Hinzufügen einer weiteren Variablen zwei Änderungen vornehmen muß. Es sollte jedenfalls nicht die Antwort auf die Frage sein, wie man in Python Strings verkettet. Das ist ja schlimmer als die concat-Funktionen anderen Sprachen!
d = "{base}{revision}{suffix}".format(base = a, revision = b, suffix = c)
Wenn's denn unbedingt ein Template sein soll, würde das bei mir meistens wie folgt aussehen: d = '%(base)s%(revision)s%(suffix)s' % locals() (natürlich nennt *niemand* seine Variablen a, b und c, bzw. würde es nach Lektüre dieses Threads niemals zugeben...) Im übrigen kann es natürlich jedem Stück Code in einem größeren Projekt (oder in einer Server-Anwendung) passieren, daß es sehr oft durchlaufen wird. Und spätestens dann spielt die Performanz eine Rolle. Die .format-Methode bezahlt für ihre (ich behaupte: in mindestens 95% der Fälle nicht benötigte) zusätzliche Flexibilität mit sehr viel schlechterer Performanz.
Allgemein würde ich, wenn es sich um Strings handelt, immer genau schauen, ob man nicht eigentlich ein Template füllen möchte, das nur gerade zufällig sehr einfach ausfällt.
Man kann es auch übertreiben mit der vorausschauenden Komplexität. Wie heißt es doch so schön - YAGNI! You ain't gonna need it! Schönenn Gruß, Tobias -- Ceterum censeo: Etwaige .sig-Dateien brauchen nicht geöffnet zu werden! Siehe <http://www.gnupg.org/>, <http://enigmail.mozdev.org/>

Tobias Herp wrote:
d = "{base}{revision}{suffix}".format(base = a, revision = b, suffix = c)
Wenn's denn unbedingt ein Template sein soll, würde das bei mir meistens wie folgt aussehen:
d = '%(base)s%(revision)s%(suffix)s' % locals()
Wurde schon erwähnt, dass ab 3.6 alternativ dazu auch
base, revision, suffix = "foo", "bar", "baz" f"{base}{revision}{suffix}" 'foobarbaz'
möglich ist? Das vermeidet ggf. das Erstellen eines temporären dicts.

On 26 Aug 2017, at 13:29, Peter Otten wrote:
Tobias Herp wrote:
d = "{base}{revision}{suffix}".format(base = a, revision = b, suffix = c)
Wenn's denn unbedingt ein Template sein soll, würde das bei mir meistens wie folgt aussehen:
d = '%(base)s%(revision)s%(suffix)s' % locals()
Wurde schon erwähnt, dass ab 3.6 alternativ dazu auch
base, revision, suffix = "foo", "bar", "baz" f"{base}{revision}{suffix}" 'foobarbaz'
möglich ist?
Das vermeidet ggf. das Erstellen eines temporären dicts.
Das ist auch mit Abstand die schnellste Variante: Python 3.6.2 (default, Jul 26 2017, 16:42:24) Type 'copyright', 'credits' or 'license' for more information IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help. In [1] ▶ base, revision, suffix = "foo", "bar", "baz" In [2] ▶ %timeit base + revision + suffix 208 ns ± 0.532 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [3] ▶ %timeit '%s%s%s' % (base, revision, suffix) 315 ns ± 1.55 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [4] ▶ %timeit '{}{}{}'.format(base, revision, suffix) 462 ns ± 1.23 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [5] ▶ %timeit f'{base}{revision}{suffix}' 14.6 ns ± 0.00911 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each) Servus, Walter
participants (4)
-
ole-usenet-spam@gmx.net
-
Peter Otten
-
Tobias Herp
-
Walter Dörwald