Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die String-Formatierung str.format in Python

Detaillierte Einführung in die String-Formatierung str.format in Python

高洛峰
高洛峰Original
2017-02-20 10:03:431535Durchsuche

Vorwort

Python hat in Version 2.6 eine neue Zeichenfolgenformatierungsmethode hinzugefügt: str.format() . Seine grundlegende Syntax besteht darin, das vorherige % durch {} und : zu ersetzen.

Platzhaltersyntax beim Formatieren:

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

“ Mapping „Regel

kann unbegrenzte Parameter über die Position

str.format() akzeptieren, und die Positionen können außer Betrieb sein:

>>> "{0} {1}".format("hello", "world")
'hello world'
>>> "{} {}".format("hello", "world")
'hello world'
>>> "{1} {0} {1}".format("hello", "world")
'world hello world'

Nach Schlüsselwortparametern

Bei Verwendung von Schlüsselparametern muss der Parametername in der Zeichenfolge angegeben werden:

>>> "I am {name}, age is {age}".format(name="huoty", age=18)
'I am huoty, age is 18'
>>> user = {"name": "huoty", "age": 18}
>>> "I am {name}, age is {age}".format(**user)
'I am huoty, age is 18'

Benutzereigenschaften können direkt über die Objekteigenschaften ausgelesen werden

str.format() :

>>> class User(object):
...  def __init__(self, name, age):
...   self.name = name
...   self.age = age
...   
...  def __str__(self):
...   return "{self.name}({self.age})".format(self=self)
...  
...  def __repr__(self):
...   return self.__str__()
...  
...
>>> user = User("huoty", 18)
>>> user
huoty(18)
>>> "I am {user.name}, age is {user.age}".format(user=user)
'I am huoty, age is 18'

Durch Subskription

Auf Elemente kann durch Subskription innerhalb der Zeichenfolge zugegriffen werden, die formatiert werden muss:

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8]
>>> "I am {0[0]}, age is {1[2]}".format(names, ages)
'I am huoty, age is 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "I am {names[0]}, age is {ages[0]}".format(**users)

Konvertierung angeben

Sie können den Konvertierungstyp der Zeichenfolge angeben:

 conversion ::= "r" | "s" | "a"

Wobei „!r“ repr(); „!s“ entspricht str(); „!a“ entspricht ascii(). Beispiel:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

Formatqualifizierer

Padding und Ausrichtung

Padding wird oft zusammen mit der Ausrichtung verwendet. ^, 95ec6993dc754240360e28e0de8de30a sind jeweils zentriert, linksbündig und rechtsbündig, gefolgt von der Breite, und das Zeichen gefolgt von: wird nur mit einem Zeichen gefüllt. Wenn nicht angegeben, wird es standardmäßig mit Leerzeichen gefüllt.

>>> "{:>8}".format("181716")
' 181716'
>>> "{:0>8}".format("181716")
'00181716'
>>> "{:->8}".format("181716")
'--181716'
>>> "{:-<8}".format("181716")
&#39;181716--&#39;
>>> "{:-^8}".format("181716")
&#39;-181716-&#39;
>>> "{:-<25}>".format("Here ")
&#39;Here -------------------->&#39;

Gleitkommagenauigkeit

Verwenden Sie f, um den Gleitkommatyp darzustellen, und Sie können ihn hinzufügen davor Präzisionssteuerung:

>>> "[ {:.2f} ]".format(321.33345)
&#39;[ 321.33 ]&#39;
>>> "[ {:.1f} ]".format(321.33345)
&#39;[ 321.3 ]&#39;
>>> "[ {:.4f} ]".format(321.33345)
&#39;[ 321.3335 ]&#39;
>>> "[ {:.4f} ]".format(321)
&#39;[ 321.0000 ]&#39;

Sie können auch ein Symbol für Gleitkommazahlen angeben, + bedeutet, dass + vor positiven Zahlen angezeigt wird, und - wird vor negativen Zahlen angezeigt; (Leerzeichen) bedeutet, dass vor positiven Zahlen ein Leerzeichen hinzugefügt wird und - vor negativen Zahlen - nichts hinzugefügt wird ({:f}):

>>> &#39;{:+f}; {:+f}&#39;.format(3.141592657, -3.141592657)
&#39;+3.141593; -3.141593&#39;
>>> &#39;{: f}; {: f}&#39;.format(3.141592657, -3.141592657)
&#39; 3.141593; -3.141593&#39;
>>> &#39;{:f}; {:f}&#39;.format(3.141592657, -3.141592657)
&#39;3.141593; -3.141593&#39;
>>> &#39;{:-f}; {:-f}&#39;.format(3.141592657, -3.141592657)
&#39;3.141593; -3.141593&#39;
>>> &#39;{:+.4f}; {:+.4f}&#39;.format(3.141592657, -3.141592657)
&#39;+3.1416; -3.1416&#39;

Basis angeben

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(18)
&#39;int: 18; hex: 12; oct: 22; bin: 10010&#39;
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(18)
&#39;int: 18; hex: 0x12; oct: 0o22; bin: 0b10010&#39;

Tausendertrennzeichen

kann verwendet werden", " als Tausendertrennzeichen:

>>> &#39;{:,}&#39;.format(1234567890)
&#39;1,234,567,890&#39;

Prozentanzeige

>>> "progress: {:.2%}".format(19.88/22)
&#39;progress: 90.36%&#39;

Tatsächlich unterstützt das Format auch weitere Typsymbole:

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Weitere Tipps

Platzhalterverschachtelung

Manchmal ist die Platzhalterverschachtelung immer noch nützlich:

>>> &#39;{0:{fill}{align}16}&#39;.format("hello", fill=&#39;*&#39;, align=&#39;^&#39;)
&#39;*****hello******&#39;
>>>
>>> for num in range(5,12):
...  for base in "dXob":
...   print("{0:{width}{base}}".format(num, base=base, width=5), end=&#39; &#39;)
...  print()
...  
...
 5  5  5 101
 6  6  6 110
 7  7  7 111
 8  8 10 1000
 9  9 11 1001
 10  A 12 1010
 11  B 13 1011

Wird als Funktion verwendet

Sie können es als Funktion an einer unnötigen Stelle aufrufen, ohne die Formatparameter anzugeben:

>>> email_f = "Your email address was {email}".format
>>> print(email_f(email="suodhuoty@gmail.com"))
Your email address was sudohuoty@gmail.com

Escape-Klammern

Sie können geschweifte Klammern zum Escape verwenden, wenn Sie geschweifte Klammern in einer Zeichenfolge verwenden müssen:

>>> " The {} set is often represented as { {0} } ".format("empty")
&#39; The empty set is often represented as {0} &#39;

Eine ausführlichere Einführung in die String-Formatierung str.format in Python und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn