Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Methoden zum Implementieren der String-Formatierung in Python

Zusammenfassung der Methoden zum Implementieren der String-Formatierung in Python

高洛峰
高洛峰Original
2017-02-21 17:01:261384Durchsuche

Python2.6+ fügt die Funktion str.format hinzu, um den ursprünglichen Operator „%“ zu ersetzen. Seine Verwendung ist intuitiver und flexibler als „%“. Hier finden Sie eine detaillierte Einführung in die Verwendung.

Das Folgende ist ein Beispiel für die Verwendung von „%“:

""
"PI is %f..." % 3.14159 # => 'PI is 3.141590...'
"%d + %d = %d" % (5, 6, 5+6) # => '5 + 6 = 11'
"The usage of %(language)s" % {"language": "python"} # => 'The usage of python'

Das Format ist sehr ähnlich printf in C-Sprache, nein? Da es sich bei „%“ um einen Operator handelt, kann auf der linken und rechten Seite nur ein Parameter platziert werden. Daher können Tupel und Wörterbücher nicht zusammen verwendet werden, was zu mangelnder Flexibilität führt .

Dasselbe Beispiel wurde mit der Formatmethode umgeschrieben:

"PI is {0}...".format(3.14159) # => 'PI is 3.14159...'
"{0} + {1} = {2}".format(5, 6, 5+6) # => '5 + 6 = 11'
"The usage of {language}".format(language = "Python") # => 'The usage of Python'

Ist es nicht sehr intuitiv? (Natürlich mag ich auch den früheren Formatausdruck, wenn ich die Sprache C verwende:-) )

Formatzeichenfolge

"{named} consist of intermingled character {0} and {1}".format("data", "markup", \
  named = "Formats trings")
format(10.0, "7.3g") # => '   10'
"My name is {0} :-{{}}".format('Fred') # => 'My name is Fred :-{}'

Achten Sie auf das '' in der ersten Zeile. Wenn eine Anweisung ein Zeilenumbruch sein muss, muss sie am Ende mit einem Backslash maskiert werden.

Sie können solche Tupel und Wörterbücher nicht mit „%“ mischen. Tatsächlich handelt es sich hierbei um einen benannten Parameter, eine Funktion von Python. Sie können die Syntax *args, **kwargs verwenden, um Sammlungen und Wörterbücher beim Definieren von Arrays zu erweitern. Es ist zu beachten, dass die genannten Parameter am Ende platziert werden.

Die zweite Anweisung gibt an, dass die integrierte Formatfunktion zum Formatieren eines einzelnen Werts verwendet wird.

Die dritte Anweisung stellt das Escape von {} dar, da {} ein Sonderzeichen in der formatierten Zeichenfolge ist und nicht direkt angezeigt werden kann. Die Escape-Methode besteht darin, eine Ebene mehr zu verschachteln.

Attribute und Indizes verwenden

"My name is {0.name}".format(open('out.txt', 'w')) # => 'My name is out.txt'

'{0.name}' entspricht Aufruf Das Objektattribut open('out.txt', 'w').name

"My name is {0[name]}".format(dict(name='Fred')) # => 'My name is Fred'

kann ebenfalls indiziert werden.

obj[key] entspricht obj.____getitem____('key')

Standardspezifizierer (Specifiers)

Geschrieben in C Sprachprogrammierer sollten sich der Komplexität von printf bewusst sein. format definiert außerdem eine Reihe von Standardspezifizierern, die verwendet werden, um das Format eines Werts zu interpretieren und ihn dann in die Zeichenfolge einzufügen. Beispiel: Auf

"My name is {0:8}".format('Fred') # => 'My name is Fred  '

':' folgt der Spezifizierer. Im obigen Beispiel gibt es nur eine '8' (Mindestbreite). )-Spezifizierer. Dies bedeutet, dass die Breite des eingefügten Werts mindestens 8 beträgt. „Fred“ hat nur 4, also kommen 4 weitere Leerzeichen hinzu. Das detaillierte Format des

-Bezeichners lautet:

[[fill]align][sign][#][0][minimumwidth][.precision][type] (nicht prägnanter als Cs printf!)

Hinweis: '[]' Gibt an, dass das Element optional ist. Daher sind alle Formatangaben optional! Wie die vorherigen Beispiele wird dies fast nie verwendet (nur um das Beispiel klarer zu machen). Tatsächlich sind diese sehr nützlich.

Sehen wir sie uns einzeln an:
1. [fill]align bedeutet Anordnung. Wenn die Mindestbreite größer als der eingefügte Wert eingestellt ist, gibt es ein Leerzeichen, genau wie „Mein Name ist Fred“ im vorherigen Beispiel. Standardmäßig wird das Leerzeichen rechts platziert, was bedeutet, dass der eingefügte Wert standardmäßig linksbündig ist. Wenn wir {0:>8} ausprobieren, werden wir feststellen, dass das Ergebnis „Mein Name ist Fred“ lautet.
fill stellt die Zeichen dar, die zum Füllen des Leerraums verwendet werden. Fill ist nur sinnvoll, wenn align angegeben ist! align kann die folgende Kennung sein:

  • 66da79d988914eed5aede2541c213215

    = Platzieren Sie nach der Ausrichtungsmarkierung ein Leerzeichen, das nur für Zahlen gültig ist. Was bedeutet es? Wie weiter unten erläutert wird, zeigt align die positiven und negativen Vorzeichen von Zahlen an, was ebenfalls nur für Zahlen gilt. Wenn „=“ angegeben ist, werden die positiven und negativen Vorzeichen der Zahl vor dem Leerzeichen angezeigt. Beispiel: format(-12, "0=8") # => '-0000012' Beachten Sie, dass hier das integrierte Funktionsformat verwendet wird, das einen einzelnen Wert formatiert. „0“ ist das Füllelement, das zum Füllen des Leerraums verwendet wird; „=“ ist die Markierung; „8“ bedeutet, dass die Mindestbreite 8 beträgt, es also nur 5 Leerzeichen gibt. Was ist mit der Ausrichtung? Align beschreibt tatsächlich die Anzeigemethode von Plus- und Minuszeichen. Hier wird der Standardwert „-“ verwendet, der später erläutert wird.
  • ^ Mittenausrichtung
  • 2.

+ Plus- und Minuszeichen anzeigen
  • - Pluszeichen nicht anzeigen, Minuszeichen anzeigen. Ohne Angabe einer Mindestbreite belegen negative Zahlen immer eine Symbolposition mehr als positive Zahlen. Standard
  • ' ' (ein Leerzeichen) Verwenden Sie ein Leerzeichen, um das Pluszeichen zu ersetzen
  • 3 # Das Präfix der angezeigten Nummer gibt an das Dezimalsystem ( 0b, 0o, 0x)

4. Füllen Sie das Leerzeichen mit „0“.

5. Minimumwidth gibt die Mindestbreite an und wurde schon oft verwendet.

6. Präzision „Präzision“ ist eine Dezimalzahl, die angibt, wie viele Dezimalstellen angezeigt werden sollen.

7. Typ Werttyp:

① Ganzzahltyp:

b Binär
  • c Zeichentyp, Zahlen in Zeichen umwandeln, die Unicode darstellen
  • d dezimal
  • o oktal
  • x hexadezimal, Kleinbuchstaben anzeigen
  • X hexadezimal, Großbuchstaben anzeigen
  • n mit d Verhalten Das Gleiche, unter Verwendung der lokalen Zahlendarstellung
  • '' (leer, keine Leerzeichen) ist dasselbe wie d
  • ②Gleitkommazahl
    • e 科学计数法表示,小写e

    • E 科学计数法表示,大写E

    • f 显示为定点数,默认小数点后六位

    • F 同f

    • g 自动选择是否用科学记数法表示

    • G 同g

    • n 同g,使用本地表示方式

    • % 使用百分比表示

    • ''(空) 同g

    每个对象可以重写自己的格式化说明符,例如datatime类重写了后可以这样表示:

    "Today is: {0:%a %b %d %H:%M:%S %Y}".format(datetime.now())

    预先转换

    ':'之后是格式说明符,之前还可以加预先转换的标识

    • !r 调用对象的_repr_方法来转换成标准字符串

    • !s 调用对象的_str_方法来转换成字符串

    重写_format_方法

    我们在格式化一个字符串时,首先格式化每个值,然后再插入字符串内。格式化值调用的就是format内置方法。format则是简单地调用该值的_format_方法。

    def format(value, format_spec):
      return value.__format__(format_spec)

    在object类内实现了_format方法,只是将本身用str()转换成字符串,然后将字符串传入内置的format方法,实际上就是调用转换为字符串后的format_方法。

    class object:
      def __format__(self, format_spec):
        return format(str(self), format_spec)

    int/float/str自身实现了_format_方法,前面已经介绍了它们各自的说明符。

    结束语

    还有一点儿是自定义Formatter,不过平常也用不到。留作下篇string模块源码解读的内容吧。建议有兴趣的朋友多看看Python标准库的源码,很有学习价值。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

    更多Python实现字符串格式化的方法小结相关文章请关注PHP中文网!

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