list für mehrteiligen format string verwenden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:Die `print()`-Funktion kennt Schlüsselwortargumente. Wie gut das Du Dich so gut mit den Grundlagen von Python auskennst. ;-)
Und was ist das?

Code: Alles auswählen

name = 3
print(1,2,3,name=4)
BlackJack

@Alfons Mittelmeyer: Das ist wieder typischer Unsinn von Dir. `print()` kennt Schlüsselwortargumente. Und wenn der Programmierer die kennt, kann er sie auch verwenden und Werte dafür übergeben. Du kennst sie halt nicht, wie so vieles was mit Python zu tun hat. Kann man aber in der Dokumentation nachlesen.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:@Alfons Mittelmeyer: Das ist wieder typischer Unsinn von Dir. `print()` kennt Schlüsselwortargumente. Und wenn der Programmierer die kennt, kann er sie auch verwenden und Werte dafür übergeben. Du kennst sie halt nicht, wie so vieles was mit Python zu tun hat. Kann man aber in der Dokumentation nachlesen.
Da bist Du im Irrtum, ich kenn das sehr wohl. Aber möchte nur darauf hinweisen, dass die Python Semantik verwirrend sein kann, für jemand der einsteigt und mit anderen Sprachen vertraut ist
.
BlackJack

@Alfons Mittelmeyer: Ach, dafür kann man einfach auf Deine gesammelten Beiträge verweisen. :-) Andererseits ist das aber auch eine ziemlich banale Erkenntniss. Die Semantik von jeder Programmiersprache kann verwirrend sein für jemanden der mit anderen Sprachen vertraut ist.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Nachdem Alfons Mittelmeyer wieder einen Thread kaputt geschrieben hat, zurück zum Thema. rsplit liefert eine Liste und format kann auch die Elemente einer Liste ausgeben, ganz ohne Magie:

Code: Alles auswählen

string = "This-is-SPARTAAA!"
print '{0[0]} {0[1]}'.format(string.rsplit('-', 1))
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sirius3 hat geschrieben:Nachdem Alfons Mittelmeyer wieder einen Thread kaputt geschrieben hat, zurück zum Thema. rsplit liefert eine Liste und format kann auch die Elemente einer Liste ausgeben, ganz ohne Magie:

Code: Alles auswählen

string = "This-is-SPARTAAA!"
print '{0[0]} {0[1]}'.format(string.rsplit('-', 1))
Endlich eine Lösung gefunden, ohne magisches Sternchen und ohne Import aus der Zukunft, wo doch nicht jeder eine Zeitmaschine hat.

Die neue Art der Formatierung des Strings ist besser geeignet für längere Formatierungen als der alte Stil außerdem kann man sich die Angabe der Parameterart ersparen.

Bei nur zwei Parametern sehen manche die alte Art aber durchaus als passend an: https://pyformat.info/#simple
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Der eigentliche Vorteil des neuen Formates ist, dass man nicht mehr durchzählen braucht, besonders wenn man viele Parameter hat:

Code: Alles auswählen

print '{anrede} {name}'.format(name='hans',anrede='herr')
Warum man hier aber so versessen ist, dennoch unbedingt das neue Format auch in Verbindung mit Durchzählung zu nehmen, das ist ein wenig rätselhaft.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Alfons Mittelmeyer: dein letztes Beispiel ist im Kontext der Problemstellung ja Quatsch. Wenn du benannte Platzhalter hast, dann muss du natürlich nicht durchzählen. Es fehlt noch deinerseits ein Beispiel, wie man benannten Platzhalter in Kombination mit einer mittels `split()` erzeugten Liste nutzt. Wir sind gespannt :-)

Abgesehen davon funktionieren benannten Platzhalter auch mit der "alten" Methode mit %s. Beispiel aus der Python 2.4 Doku:

Code: Alles auswählen

>>> print '%(language)s has %(#)03d quote types.' % {'language': "Python", "#": 2}
Gruß, noisefloor
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

bwbg hat geschrieben:Das Verwenden der %-Formatierung für Strings sollte durch die format-Methode ersetzt werden.
Warum :?:

Oder was ist der Vorteil von {0[0]} gegenüber %s ?
BlackJack

@Alfons Mittelmeyer: Schau Dir doch einfach mal an was man mit `format()` machen kann und vergleiche das mit ``%``-Formatierung. In der Python-Dokumentation. Und im PEP 3101 zu der Methode/Funktion, wo das alles Vorgeschlagen wurde.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:@Alfons Mittelmeyer: Schau Dir doch einfach mal an was man mit `format()` machen kann und vergleiche das mit ``%``-Formatierung. In der Python-Dokumentation. Und im PEP 3101 zu der Methode/Funktion, wo das alles Vorgeschlagen wurde.
Zur Debatte steht nicht, dass format alles kann was % kann und noch vieles mehr. Und im PEP 3101 werden die Anforderungen für format definiert. Dabei geht es um Advanced String Formatting. Es steht dort nicht drin, dass man für simple String Formatting % nicht mehr nehmen soll. Ich bin der Auffassung, daß man % dort nehmen soll, wo es vorteilhafter ist, weil dort es einen kompakteren Ausdruck, übersichtlicheren, leichter zu schreibenden und verständlicheren Ausdruck ergibt. Außerdem ist es auch vorteilhaft, dass eventuell eine Exception geworfen wird, wenn man sich bei den Parametern mit der Reihenfolge Strings und Zahlen vertut, anstatt dass alles ohne Murren geschluckt wird.
BlackJack

@Alfons Mittelmeyer: Doch, zur Debatte stand auch was der Vorteil von `format()` ist. Die Frage hast Du gestellt, die Frage habe ich beantwortet.

Das man `format()` bevorzugen sollte ergibt sich aus dem Zen of Python („There should be one-- and preferably only one --obvious way to do it.“) und dem Umstand das die ``%``-Formatierung nur deswegen (noch) nicht aus der Sprache geflogen ist weil viel alter Code die noch verwendet. Und die Dokumentation zu `str.format()` ist da auch recht deutlich: „This method of string formatting is the new standard in Python 3, and should be preferred to the % formatting described in String Formatting Operations in new code.“

Im PEP zu `format()` steht auch das die beiden Varianten so lange nebeneinander bestehen können bis ``%`` „deprecated“ wird.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:Zen of Python („There should be one-- and preferably only one --obvious way to do it.“
Ach so es geht um Zen und um die Methoden der Meister. Jeder soll tun, wie er es versteht, die Meister nach Art der Meister, die Lehrlinge nach Art der Lehrlinge, bis sie auch die Methoden der Meister verstehen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ach so es geht um Zen und um die Methoden der Meister.
Nee, da hast du mal wieder war nicht verstanden oder willst es mal wieder falsch verstehen. Das "Zen of Python" ist genau so wie die PEP8 für _jeden_ Python-Programmierer, vom absoluten Newbie bis zum BlackJack ...äh... Blackbelt ..äh.. Profi. Je eher man sich danach richtet, desto besser.

Wenn man das alles ignoriert und sich seine eigene Python-Welt aufbaut... also was dabei dann rauskommt, dafür gibt es ja auch mindestens ein Beispiel hier im Forum *SCNR*.

Gruß, noisefloor
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

Alfons Mittelmeyer hat geschrieben:
Judge hat geschrieben:Hi Alfons,zum Beispiel würde ich gerne zusätzliche Variablen vermeiden.
Es wäre total cool, wenn es dafür einen Kniff gäbe.

Code: Alles auswählen

print '%s %s %s' % tuple("This-is-SPARTAAA!".split('-'))
War das der Kniff?
Ja, zum Beispiel! Ein tuppel draus machen - da bin ich nicht drauf gekommen ;)

PS: Danke auch an alle, die hier näher auf .format eingegangen sind; das sieht sehr fresh aus und da es, wie ich im Verlauf der vielen Beiträge herausgelesen habe, als der "neue hot shit" der Python-Welt angesehen werden darf, denke ich werde ich mich der Entwicklung auch nicht entgegen stellen und mein Python-Kung-Fu in der Richtung etwas stärken.

Vielen Dank, Leute!
Antworten