it:programmiersprache:python:01_strings

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
it:programmiersprache:python:01_strings [05.09.2026 15:15] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1it:programmiersprache:python:01_strings [17.09.2026 07:25] (aktuell) – [f-Präfix] marsch
Zeile 1: Zeile 1:
 +====== Strings ======
  
 +===== Literale =====
 +
 +Literale sind textuelle Angaben von konstanten Werten. Zum Beispiel
 +
 +<code python>
 +i: int = 17
 +pi: float = 3.14
 +name: str = "Walter"
 +</code>
 +
 +gibt Wert einer Variablen an.
 +
 +  * Variable ''i'' vom Typ ''int'' hat den Wert ''17''. Der Text ''17'' ist der Literal für den numerischen Wert 17.
 +  * Variable ''pi'' vom Typ ''float'' hat den Wert ''3.14''. Der Text ''3.14'' ist der Literal für den numerischen Wert 3.14.
 +  * Variable ''name'' vom Typ ''str'' hat den Wert ''Walter''. Der Text ''"Walter"'' ist der Literal für den Namen Walter.
 +
 +
 +==== u-Präfix (Unicode) ====
 +
 +> <wrap em hi>Ab Python 2.0</wrap> [[https://peps.python.org/pep-0100/|PEP 100 – Python Unicode Integration]] ([[https://peps.pythonlang.de/pep-0100/|DE]])
 +
 +Der Python Quelltext (vor Python 3.0) eines Programms wird gemäß dem ASCII Zeichensatz abgelegt. Wenn man mal von Sonderzeichen wie zum Beispiel den deutschen Umlauten (Ä,Ö,Ü, ...) absieht, kann der Text auch in Unicode (UTF-8) abgelegt werden, da dieser in weiten Bereichen mit dem ASCII Zeichensatz übereinstimmt. Das gilt natürlich nicht für alle Werte die ein Byte [0 ... 255] annehmen kann um ein Zeichen aus dem ASCII Zeichensatz darzustellen.
 +
 +Strings die allerdings Unicode Zeichen enthalten, etwa zur String Ausgabe, können in Form eines Strings mit einem Präfix ''u'' bzw. ''U'' angegeben werden. Etwa : '' u'Schöne neue Welt!' ''.
 +
 +> <wrap em hi>Ab Python 3.0</wrap> ist die Angabe eines String-Literals ''%%u''%%'' obsolete, da der Python Quelltext (ab Python 3.0) selbst in Unicode (UTF-8) erfasst wird.
 +
 +
 +==== b-Präfix (bytes) ====
 +
 +> <wrap em hi>Ab Python 3.0a1, Ignoriert in 2.7</wrap> [[https://peps.python.org/pep-3137/|PEP 3137 – Immutable Bytes and Mutable Buffer]] ([[https://peps.pythonlang.de/pep-3137/|DE]])
 +
 +Zur Angabe eines String-Literals für Byte-Folgen ab Python 3.1 - nicht aber in Python 2.7 übernommen.
 +
 +<code python>
 +</code>
 +
 +
 +===== Formatierung =====
 +
 +Oder auch Stringinterpolation (//<wrap :en>string interpolation</wrap>// oder //<wrap :en>string substitutions</wrap>//) genannt, dient dazu eine Textausgabe zu machen in der Werte von Variablen oder Konstanten eingebettet werden.
 +
 +
 +==== Mit % (Modulo-Operator) ====
 +
 +> <wrap em hi>Ab Python 1.0</wrap>
 +
 +Formatierung im Stil von ''printf()'' aus C.
 +
 +<WRAP group>
 +<WRAP half column>
 +
 +=== Code ===
 +
 +<code python>
 +print('Ein String mit %(name)03s format' % (Tupel mit Werten))
 +</code>
 +
 +</WRAP><WRAP half column>
 +
 +=== Beschreibung ===
 +
 +Beinhaltet:
 +  - '%' als Einleitung einer Formatangabe
 +  - Optional: einen Bezeichner in runden Klammern '(name)'.
 +  - Optional: Konvertierungsflags
 +  - Optional: Minimum Feldbreite
 +  - Optional: Präzision mit einem Punkt ('.') beginnend
 +  - Optional: Längenmodifizierer
 +  - Konvertierungstyp
 +
 +</WRAP>
 +</WRAP>
 +
 +<WRAP center round info 60%>
 +**Info**
 +
 +Auch wenn diese Art der Formatierung schon in die Jahre gekommen ist, so ist sie doch im Bezug zum Python Logger noch recht bedeutsam.
 +
 +Mit
 +<code python>
 +logger.info("Value {} is to high".format(i))
 +</code>
 +wird zwar ein Wert (hier ''i'') in den String eingearbeitet, aber das jedes mal wenn ein solcher Log-Eintrag gemacht werden soll. Nun kann man beim Logger aber das Level des //<wrap :en>loggings</wrap>// wählen, sodaß der formatierte String nicht ausgegeben werden muss. Das gilt auch für die durchaus schnell formatierten [[#f-Strings]]. Das ist vergeudete Zeit.
 +
 +Mit dem alten Format
 +<code python>
 +logger.info("Value %d is to high", i)
 +</code>
 +wird der String und seine Parameter (Tuple) zwar an den Log-Aufruf übergeben, jedoch wird eine Formatierung des Ausgabestrings nicht durchgeführt, sollte das Level entsprechend gesetzt sein.
 +</WRAP>
 +
 +
 +==== $-Präfix ====
 +
 +> <wrap em hi>Ab Python 2.1</wrap> [[https://peps.python.org/pep-0215/|PEP 215 – String Interpolation]] ([[https://peps.pythonlang.de/pep-0215/|DE]])
 +
 +<WRAP group>
 +<WRAP half column>
 +
 +=== Code ===
 +
 +<code python>
 +
 +</code>
 +
 +</WRAP><WRAP half column>
 +
 +=== Beschreibung ===
 +
 +</WRAP>
 +</WRAP>
 +
 +
 +==== Templates ====
 +
 +> <wrap em hi>Ab Python 2.4</wrap> [[https://www.python.org/dev/peps/pep-0292|PEP 292 – Simpler String Substitutions]] ([[https://peps.pythonlang.de/pep-0292/|DE]])
 +
 +Formatierung mit Template-Strings
 +
 +<WRAP group>
 +<WRAP half column>
 +
 +=== Code ===
 +
 +<code python>
 +from string import Template
 +
 +s = '$blah und $blub'
 +s.substitue(blah='Hinz', blub='Kunz')
 +</code>
 +
 +</WRAP><WRAP half column>
 +
 +=== Beschreibung ===
 +
 +</WRAP>
 +</WRAP>
 +
 +
 +==== .format()-Style ====
 +
 +> <wrap em hi>Ab Python 3.0, Backported to 2.6</wrap> [[https://peps.python.org/pep-3101/|PEP 3101 – Advanced String Formatting]] ([[https://peps.pythonlang.de/pep-0292/|DE]])
 +
 +Formatierung mit ''str.format()''
 +
 +<WRAP group>
 +<WRAP half column>
 +
 +=== Code ===
 +
 +<code python>
 +print('Ein String {} mit Format'.format())
 +</code>
 +
 +</WRAP><WRAP half column>
 +
 +=== Beschreibung ===
 +
 +Sehr leistungsfähig.
 +</WRAP>
 +</WRAP>
 +
 +
 +==== f-Präfix ====
 +
 +> <wrap em hi>Ab Python 3.5.3</wrap> [[https://www.python.org/dev/peps/pep-0498/|PEP 498 – Literal String Interpolation]] ([[https://peps.pythonlang.de/pep-0498/|DE]])
 +
 +String Formatierung mit
 +
 +Sollte der Parameter explizit in einen String umgewandelt werden, so sollte statt ''f%%"... {str(param)} ..."%%'' das Conversion-Flag ''f%%"... {param!s} ..."%%'' verwendet werden.\\ 
 +Sollte der Parameter explizit in einen String umgewandelt werden, so sollte statt ''f%%"... {repr(param)} ..."%%'' das Conversion-Flag ''f%%"... {param!r} ..."%%'' verwendet werden.
 +
 +
 +<WRAP group>
 +<WRAP half column>
 +
 +=== Code ===
 +
 +<code python>
 +param = 3.14
 +
 +print(f"Math PI = {param}")
 +</code>
 +
 +</WRAP><WRAP half column>
 +
 +=== Beschreibung ===
 +
 +</WRAP>
 +</WRAP>
 +
 +
 +==== t-Präfix ====
 +
 +> <wrap em hi>Ab Python 3.14</wrap> [[https://www.python.org/dev/peps/pep-0750/|PEP 750 – Template Strings]] ([[https://peps.pythonlang.de/pep-0750/|DE]])
 +
 +String Formatierung mit t-Präfix. Es besteht eine Ähnlichkeit mit [[#f-Präfix]], jedoch bleibt der Platzhalter im String erhalten und kann wiederverwendet werden.
 +
 +<WRAP group>
 +<WRAP half column>
 +
 +=== Code ===
 +
 +<code python>
 +t'A String {} with format'
 +</code>
 +
 +</WRAP><WRAP half column>
 +
 +=== Beschreibung ===
 +
 +Der Präfix ist ein ''t'' oder ein ''T'' das vorangestellt wird.
 +
 +</WRAP>
 +</WRAP>
 +
 +
 +[[it:programmiersprache:python:exkurs:pfade:start|Exkurs Pfade]]