format() Einstieg

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.
Antworten
MoonKid
User
Beiträge: 106
Registriert: Mittwoch 10. Dezember 2014, 16:24

Mir wurde gesagt, ich soll format() als printf()-artigen-Ersatz verwenden.

Verstehe nicht, warum das hier nicht funktioniert.

Code: Alles auswählen

>>> format("%s %s %s" % '1', '2', '3')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nun hast du alle Formatierungsmöglichkeiten vermischt ;-) Entweder:

Code: Alles auswählen

"%s %s %s" % ("spam", "ham", "eggs")
Oder besser:

Code: Alles auswählen

"{} {} {}".format("spam", "ham", "eggs")
Letzteres bietet noch viel mehr ausgeklügelte Möglichkeiten, schau dazu in der Dokumentation mal unter String Formatting nacht.
Das Leben ist wie ein Tennisball.
BlackJack

@MoonKid: Du mischst hier gerade auf ganz eigenartige Weise zwei verschiedene Arten von Zeichenkettenformatierung. Du rufst die `fomat()`-Funktion mit drei Argumenten auf. Das erste Argument ist der Ausdruck ``"%s %s %s" % '1'``. Der binäre ``%``-Operator auf Zeichenketten formatiert den Wert auf der rechten Seite (Einzelwert oder Tupel mit mehreren Werten) in die Platzhalter in der Zeichenkette links vom Operator. Du hast da aber nun drei Platzhalter und nur einen Wert. Das führt zu besagter Ausnahme. Du möchtest entweder:

Code: Alles auswählen

In [2]: '%s %s %s' % ('1', '2', '3')
Out[2]: '1 2 3'
Oder:

Code: Alles auswählen

In [3]: '{0} {1} {2}'.format('1', '2', '3')
Out[3]: '1 2 3'
Hier wird die `format()`-*Methode* auf einer Zeichenkette verwendet. Die `format()`-*Funktion* kann nur einen einzelnen Wert als Zeichenkette formatieren und erwartet diesen Wert und eine Formatspezifikation als Argumente.
MoonKid
User
Beiträge: 106
Registriert: Mittwoch 10. Dezember 2014, 16:24

Nachschlagbar: https://docs.python.org/3/tutorial/inputoutput.html

Wo wir gerade bei Stings sind. Es gibt doch bestimmt auch ne schöne Python-Regel über die Verwendung von " und ' ? Wann was und warum?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

MoonKid hat geschrieben:Es gibt doch bestimmt auch ne schöne Python-Regel über die Verwendung von " und ' ? Wann was und warum?
Das ist echt Geschmackssache. Ich bevorzuge rein optisch die einfachen Hochkommas. Das spart auch Tinte, wenn man den Code mal druckt. :D
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Die Regel lautet, entweder das eine oder das andere verwenden.
Die Pascal Schreibweise mag ich gar nicht, schon <> sah komisch aus.
Und Tinte ist mir egal, ich hab einen Laserdrucker. :mrgreen:
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

Ich verwende ' weil das auch die üblichen Begrenzer bei der `repr()`-Darstellung sind. Ausser bei Docstrings da verwende ich Triple-" weil das a) alle so machen und b) `pydoc` mal Probleme bei anderen Begrenzern hatte.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

Normalerweise benutze ich ', falls ' im String vorkommen, dann ", wenn sowohl ' als auch " vorkommen, dann ''' wenn sowohl ' als auch " als auch ''' vorkommen, dann """, wenn sowohl ' als auch " und ''' und """ vorkommen, dann geh ich Lotto-Spielen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ich warte immer erstmal den Name/SyntaxError ab. Wenn dann der erste 'Hä?'-Impuls verflogen ist und sich ein "War ja wieder klar: '...' vergessen!" einstellt, und so weiter... :wink:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten