[Python-de] das '%' token ... was kann das alles [newbie question no. 2]

Martin v. Loewis martin at loewis.home.cs.tu-berlin.de
Mon Oct 9 01:12:39 EDT 2000


> >>> print "not for another %i minutes ..." \
>       % (time.time())
> 
>       # output war:
>       not for another 971014307 minutes ...
> 
>    Wie geht man denn nun mit diesem %i und dem %
>    Zeichen um und was kann man damit tun??
>    *confused*

% ist ein "binärer Operator": links ein Argument, rechts ein Argument,
am Ende kommt ein Wert raus. Wenn das linke Argument eine Zahl ist,
ist es der Modulo-Operator:

>>> 17%4
1

Wenn das linke Argument ein String ist, ist es der
Formatierungsoperator. Dann kann das rechte Argument eins der
folgenden sein:
- ein Tupel, dann werden die Tupelelemente formatiert;
- ein Dictionary, dann werden die Dictionarywerte formatiert;
- ein einzelnes Objekt, dann wird dieses formatiert.

Im String müssen immer so viele Prozentzeichen sein, wie Objekte
formatiert werden sollen. Jedes Objekt wird anhand des Buchstabens
rechts neben dem Prozentzeichen im String formatiert. Die wichtigsten
Zeichen sind:
%d - formatiere eine Zahl; %i bedeutet das Gleiche.
%o - formatiere eine Zahl oktal.
%x - formatiere eine Zahl hexadezimal.
%f - formatiere eine Gleitkommazahl.
%e - formatiere eine Gleitkommazahl in wissenschaftlicher Darstellung.
%s - formatiere einen String.
%% - füge ein Prozent ein (kein Objekt nötig).

Damit ergibt sich also

>>> "%x" % 23     # hex, ein Objekt
'17'
>>> "%x %s %d" % (23,"Hallo",42)   # drei Objekte: hex, string, dez
'17 Hallo 42'

Weiterhin kann man zwischen dem Prozentzeichen im String und dem
Formatbuchstaben eine Reihe von Flags angeben, die wichtigsten sind:
- 0 "füge führende Nullen ein"
- - "gib das Feld linksbündig aus"
- + "gib bei positiven Zahlen das Vorzeichen aus"
- <zahl> Breite des Gesamtfelds
- . <zahl> Präzision, Minimalzahl der Stellen bei ganzen Zahlen,
  Nachkommastellen bei Gleitkommazahlen, Maximalbreite bei Strings

Damit bekommt man
>>> "X%10dY" % 42      # 10 Zeichen für die Zahl
'X        42Y'
>>> "X%-10dY" % 42     # linksbündig
'X42        Y'
>>> "X%10.5dY" % 42    # minimal 5 Ziffern
'X     00042Y'
>>> "%+5d" % 42        # ein führendes +
'  +42'
>>> "%+5d" % -42       # hat bei einer negativen Zahl keinen Effekt
'  -42'

Schliesslich gibt es noch die Geschichte mit den Dictionaries. Wenn
das zweite Argument ein Dictionary ist und die Felder der Form
%(key)<flags><format> sind, dann wird im Dictionary nach key gesucht
und der Wert formatiert:

>>> d["name"]="Martin"
>>> d["wohnort"]="Berlin"
>>> "Ich heisse %(name)s und wohne in %(wohnort)s." % d
'Ich heisse Martin und wohne in Berlin.'

Wenn man das mit vars() kombiniert, kann man leicht Variablen
ausgeben:

>>> name="Martin"
>>> name="v. Löwis"
>>> vorname="Martin"
>>> wohnort="Berlin"
>>> plz=12489
>>> print """Name: %(vorname)s %(name)s
... Wohnort: %(plz)5d %(wohnort)s""" % vars()
Name: Martin v. Löwis
Wohnort: 12489 Berlin

Das ist noch nicht alles, glaube ich - in der "Library Reference" sind
alle Features aufgeführt (allerdings muss man noch eine C-Referenz
haben, um sie alle zu verstehen).

Ciao,
Martin




More information about the Python-de mailing list