Formát reťazca Python ()

Metóda string format () naformátuje daný reťazec na krajší výstup v Pythone.

Syntax format()metódy je:

 template.format (p0, p1,…, k0 = v0, k1 = v1,…)

Tu sú p0, p1, … pozičné argumenty a k0, k1, … sú argumenty kľúčových slov s hodnotami v0, v1, ….

Šablóna je zmesou kódov formátu s zástupnými symbolmi pre argumenty.

Parametre formátu reťazca ()

format()metóda má ľubovoľný počet parametrov. Je však rozdelený na dva typy parametrov:

  • Pozičné parametre - zoznam parametrov, ktoré sú prístupné s indexom parametra vo vnútri zložených zátvoriek(index)
  • Parametre kľúčového slova - zoznam parametrov typu kľúč = hodnota, ku ktorým je možné pristupovať pomocou kľúča parametra vo zložených zátvorkách(key)

Vrátená hodnota z formátu reťazca ()

format()Metóda vracia formátovaný reťazec.

Ako funguje reťazec format ()?

format()Prečíta typ argumentov odovzdaných k nemu a formátuje ho podľa formátu kódov definovaných v reťazci.

Pre pozičné argumenty

Pozičné argumenty

Argument 0 je tu reťazec „Adam“ a Argument 1 je pohyblivé číslo 230.2346.

Poznámka: Zoznam argumentov začína v Pythone od 0.

Reťazec "Hello (0), your balance is (1:9.3f)"je reťazec šablóny. Toto obsahuje kódy formátu pre formátovanie.

Kučeravé zátvorky sú iba zástupné symboly pre argumenty, ktoré sa majú umiestniť. Vo vyššie uvedenom príklade je (0) zástupný symbol pre „Adam“ a (1: 9,3f) je zástupný symbol pre 230.2346.

Pretože reťazec šablóny odkazuje na format()argumenty ako (0)a (1), argumenty sú pozičnými argumentmi. Na oba sa dá odkazovať aj bez čísel, pretože ()a Python ich interne prevádza na čísla.

Interne,

  • Vzhľadom k tomu, "Adam" je 0 th argument je umiestnený na mieste (0). Pretože (0)neobsahuje žiadne ďalšie kódy formátu, nevykonáva žiadne ďalšie operácie.
  • Avšak, to nie je prípad pre 1 st argumentu 230.2346. Tu (1:9.3f)umiestni na svoje miesto 230 2346 a vykoná operáciu 9.3f.
  • f určuje, že formát sa zaoberá float číslom. Ak nie je správne zadaný, vydá chybu.
  • Časť pred znakom „.“ (9) určuje minimálnu šírku / výplň, ktorú môže trvať číslo (230.2346). V takom prípade je 230.2346 pridelených minimálne 9 miest vrátane znaku „.“.
    Ak nie je zadaná žiadna možnosť zarovnania, zarovná sa napravo od zvyšných medzier. (Pre reťazce je zarovnaný doľava.)
  • Časť po znaku „.“ (3) skráti desatinnú časť (2346) na dané číslo. V tomto prípade je 2346 orezaný na 3 miestach.
    Zvyšné čísla (46) sú zaokrúhlené na výstup 235.

Pre argumenty kľúčových slov

Argumenty kľúčového slova

Rovnaký príklad sme použili aj vyššie, aby sme ukázali rozdiel medzi kľúčovými slovami a pozičnými argumentmi.

Tu sme namiesto parametrov použili iba kľúč - hodnotu pre parametre. Menovite name = "Adam" a blc = 230.2346.

Pretože na tieto parametre sa odkazuje pomocou svojich kľúčov ako (názov) a (blc: 9.3f), sú známe ako kľúčové slovo alebo pomenované argumenty.

Interne,

  • Zástupný symbol (meno) je nahradený hodnotou mena - „Adam“. Pretože neobsahuje žiadne ďalšie kódy formátu, umiestni sa „Adam“.
  • Pre argument blc = 230.2346 je zástupný symbol (blc: 9.3f) nahradený hodnotou 230.2346. Pred výmenou, ako v predchádzajúcom príklade, s ním však vykoná operáciu 9.3f.
    To má na výstupe 230 235. Desatinná časť je orezaná po 3 miestach a zvyšné číslice sú zaokrúhlené. Rovnako je celková šírka priradená 9 a ponecháva dve medzery vľavo.

Základné formátovanie pomocou formátu ()

format()Metóda umožňuje použitie jednoduchých zástupných symbolov pre formátovanie.

Príklad 1: Základné formátovanie predvolených, pozičných a kľúčových argumentov

 # default arguments print("Hello (), your balance is ().".format("Adam", 230.2346)) # positional arguments print("Hello (0), your balance is (1).".format("Adam", 230.2346)) # keyword arguments print("Hello (name), your balance is (blc).".format(name="Adam", blc=230.2346)) # mixed arguments print("Hello (0), your balance is (blc).".format("Adam", blc=230.2346))

Výkon

Dobrý deň Adam, váš zostatok je 230,2346. Dobrý deň Adam, váš zostatok je 230,2346. Dobrý deň Adam, váš zostatok je 230,2346. Dobrý deň Adam, váš zostatok je 230,2346.

Poznámka: V prípade zmiešaných argumentov musia argumenty kľúčových slov vždy nasledovať pozičné argumenty.

Formátovanie čísel pomocou formátu ()

Čísla môžete formátovať pomocou špecifikátora formátu uvedeného nižšie:

Typy formátovania čísel
Typ Význam
d Desatinné celé číslo
c Zodpovedajúci znak Unicode
b Binárny formát
o Osmičkový formát
X Hexadecimálny formát (malé písmená)
X Hexadecimálny formát (veľké písmená)
n Rovnaké ako 'd'. Okrem toho, že používa aktuálne miestne nastavenie oddeľovača čísel
e Exponenciálny zápis. (malé písmeno e)
E Exponential notation (uppercase E)
f Displays fixed point number (Default: 6)
F Same as 'f'. Except displays 'inf' as 'INF' and 'nan' as 'NAN'
g General format. Rounds number to p significant digits. (Default precision: 6)
G Same as 'g'. Except switches to 'E' if the number is large.
% Percentage. Multiples by 100 and puts % at the end.

Example 2: Simple number formatting

 # integer arguments print("The number is:(:d)".format(123)) # float arguments print("The float number is:(:f)".format(123.4567898)) # octal, binary and hexadecimal format print("bin: (0:b), oct: (0:o), hex: (0:x)".format(12))

Output

 The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c

Example 3: Number formatting with padding for int and floats

 # integer numbers with minimum width print("(:5d)".format(12)) # width doesn't work for numbers longer than padding print("(:2d)".format(1234)) # padding for float numbers print("(:8.3f)".format(12.2346)) # integer numbers with minimum width filled with zeros print("(:05d)".format(12)) # padding for float numbers filled with zeros print("(:08.3f)".format(12.2346))

Output

 1 2 1 2 3 4 1 2 . 2 3 5 0 0 0 1 2 0 0 1 2 . 2 3 5 

Here,

  • in the first statement, (:5d) takes an integer argument and assigns a minimum width of 5. Since, no alignment is specified, it is aligned to the right.
  • In the second statement, you can see the width (2) is less than the number (1234), so it doesn't take any space to the left but also doesn't truncate the number.
  • Unlike integers, floats has both integer and decimal parts. And, the mininum width defined to the number is for both parts as a whole including ".".
  • In the third statement, (:8.3f) truncates the decimal part into 3 places rounding off the last 2 digits. And, the number, now 12.235, takes a width of 8 as a whole leaving 2 places to the left.
  • If you want to fill the remaining places with zero, placing a zero before the format specifier does this. It works both for integers and floats: (:05d) and (:08.3f).

Example 4: Number formatting for signed numbers

 # show the + sign print("(:+f) (:+f)".format(12.23, -12.23)) # show the - sign only print("(:-f) (:-f)".format(12.23, -12.23)) # show space for + sign print("(: f) (: f)".format(12.23, -12.23))

Output

+12.230000 -12.230000 12.230000 -12.230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Formátovanie čísla so zarovnaním

Operátory and =sa používajú na zarovnanie, keď sa číslam priradí určitá šírka.

Formátovanie čísla so zarovnaním
Typ Význam
< Zarovnané doľava so zvyšným priestorom
^ Stred je zarovnaný na zostávajúci priestor
> Zarovnané doprava so zvyšným priestorom
= Vynúti podpísanie (+) (-) do polohy úplne zľava

Príklad 5: Formátovanie čísla so zarovnaním doľava, doprava a na stred

 # integer numbers with right alignment print("(:5d)".format(12)) # float numbers with center alignment print("(:^10.3f)".format(12.2346)) # integer left alignment filled with zeros print("(:<05d)".format(12)) # float numbers with center alignment print("(:=8.3f)".format(-12.2346))

Výkon

1 2 1 2. 2 3 5 1 2 0 0 0 - 1 2. 2 3 5

Poznámka: Zarovnanie doľava vyplnené nulami pre celé čísla môže spôsobiť problémy, pretože 3. príklad vracia namiesto 12 hodnotu 12000.

Formátovanie reťazcov pomocou format ()

Rovnako ako čísla, aj reťazec môže byť naformátovaný podobným spôsobom ako format().

Example 6: String formatting with padding and alignment

 # string padding with left alignment print("(:5)".format("cat")) # string padding with right alignment print("(:>5)".format("cat")) # string padding with center alignment print("(:^5)".format("cat")) # string padding with center alignment # and '*' padding character print("(:*^5)".format("cat"))

Output

 c a t c a t c a t * c a t * 

Example 7: Truncating strings with format()

 # truncating strings to 3 letters print("(:.3)".format("caterpillar")) # truncating strings to 3 letters # and padding print("(:5.3)".format("caterpillar")) # truncating strings to 3 letters, # padding and center alignment print("(:^5.3)".format("caterpillar"))

Output

 c a t c a t c a t 

Formatting class and dictionary members using format()

Python internally uses getattr() for class members in the form ".age". And, it uses __getitem__() lookup for dictionary members in the form "(index)".

Example 8: Formatting class members using format()

 # define Person class class Person: age = 23 name = "Adam" # format age print("(p.name)'s age is: (p.age)".format(p=Person()))

Output

 Adam's age is: 23 

Here, Person object is passed as a keyword argument p.

Inside the template string, Person's name and age are accessed using .name and .age respectively.

Example 9: Formatting dictionary members using format()

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(p(name))'s age is: (p(age))".format(p=person))

Output

 Adam's age is: 23 

Similar to class, person dictionary is passed as a keyword argument p.

Inside the template string, person's name and age are accessed using (name) and (age) respectively.

There's an easier way to format dictionaries in Python using str.format(**mapping).

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(name)'s age is: (age)".format(**person))

** is a format parameter (minimum field width).

Arguments as format codes using format()

You can also pass format codes like precision, alignment, fill character as positional or keyword arguments dynamically.

Example 10: Dynamic formatting using format()

 # dynamic string format template string = "(:(fill)(align)(width))" # passing format codes as arguments print(string.format('cat', fill='*', # dynamic float format template num = "(:(align)(width).(precision)f)" # passing format codes as arguments print(num.format(123.236,>

Output

 * * c a t * * 1 2 3 . 2 4 

Here,

  • In the first example, 'cat' is the positional argument is to be formatted. Likewise, fill='*', align='^' and width=5 are keyword arguments.
  • In the template string, these keyword arguments are not retrieved as normal strings to be printed but as the actual format codes fill, align and width.
    The arguments replaces the corresponding named placeholders and the string 'cat' is formatted accordingly.
  • Likewise, in the second example, 123.236 is the positional argument and, align, width and precision are passed to the template string as format codes.

Extra formatting options with format()

format() also supports type-specific formatting options like datetime's and complex number formatting.

format() internally calls __format__() for datetime, while format() accesses the attributes of the complex number.

You can easily override the __format__() method of any object for custom formatting.

Example 11: Type-specific formatting with format() and overriding __format__() method

 import datetime # datetime formatting date = datetime.datetime.now() print("It's now: (:%Y/%m/%d %H:%M:%S)".format(date)) # complex number formatting complexNumber = 1+2j print("Real part: (0.real) and Imaginary part: (0.imag)".format(complexNumber)) # custom __format__() method class Person: def __format__(self, format): if(format == 'age'): return '23' return 'None' print("Adam's age is: (:age)".format(Person()))

Output

 It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23 

Here,

  • For datetime:
    Current datetime is passed as a positional argument to the format() method.
    And, internally using __format__() method, format() accesses the year, month, day, hour, minutes and seconds.
  • For complex numbers:
    1+2j is internally converted to a ComplexNumber object.
    Then accessing its attributes real and imag, the number is formatted.
  • Overriding __format__():
    Like datetime, you can override your own __format__() method for custom formatting which returns age when accessed as (:age)

Môžete tiež použiť objekt __str__()a __repr__()funkčnosť so skratkovými zápismi pomocou format().

Rovnako ako __format__()môžete ľahko prepísať objekty __str__()a __repr_()metódy.

Príklad 12: __str () __ a __repr () __ skratky! R a! S pomocou format ()

 # __str__() and __repr__() shorthand !r and !s print("Quotes: (0!r), Without Quotes: (0!s)".format("cat")) # __str__() and __repr__() implementation for class class Person: def __str__(self): return "STR" def __repr__(self): return "REPR" print("repr: (p!r), str: (p!s)".format(p=Person()))

Výkon

 Citáty: „mačka“, bez úvodzoviek: mačka repr: REPR, str: STR 

Zaujímavé články...