Formát řetězce Python ()

Metoda string format () naformátuje daný řetězec na hezčí výstup v Pythonu.

Syntaxe format()metody je:

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

Zde p0, p1,… jsou poziční argumenty a k0, k1,… jsou argumenty klíčových slov s hodnotami v0, v1,….

Šablona je směs formátových kódů s zástupnými symboly pro argumenty.

Parametry formátu řetězce ()

format()metoda má libovolný počet parametrů. Je však rozdělen do dvou typů parametrů:

  • Poziční parametry - seznam parametrů, ke kterým lze přistupovat pomocí indexu parametrů uvnitř složených závorek(index)
  • Parametry klíčových slov - seznam parametrů typu klíč = hodnota, ke kterým lze přistupovat pomocí klíče parametru uvnitř složených závorek(key)

Vrátit hodnotu z formátu řetězce ()

format()Metoda vrací formátovaný řetězec.

Jak funguje řetězec ()?

format()Přečte typ argumentů předaných k němu a formátuje jej podle formátu kódů definovaných v řetězci.

Pro poziční argumenty

Poziční argumenty

Argument 0 je zde řetězec „Adam“ a Argument 1 je plovoucí číslo 230.2346.

Poznámka: Seznam argumentů začíná v Pythonu od 0.

Řetězec "Hello (0), your balance is (1:9.3f)"je řetězec šablony. Obsahuje kódy formátování pro formátování.

Kudrnaté závorky jsou pouze zástupné symboly pro umístění argumentů. Ve výše uvedeném příkladu je (0) zástupný symbol pro „Adam“ a (1: 9,3f) je zástupný symbol pro 230.2346.

Vzhledem k tomu, že řetězec šablony odkazuje na format()argumenty jako (0)a (1), jsou argumenty pozičními argumenty. Na oba lze také odkazovat bez čísel, protože ()a Python je interně převede na čísla.

Vnitřně,

  • Vzhledem k tomu, „Adam“ je 0 th argument je umístěn na místě (0). Protože (0)neobsahuje žádné další kódy formátu, neprovádí žádné další operace.
  • To však neplatí pro první argument 230.2346. Zde (1:9.3f)umístí 230.2346 na své místo a provede operaci 9.3f.
  • f určuje, že formát pracuje s číslem float. Pokud není správně zadán, vydá chybu.
  • Část před „.“ (9) určuje minimální šířku / výplň, kterou může číslo (230.2346) pojmout. V tomto případě je 230.2346 přiděleno minimálně 9 míst včetně znaku „.“.
    Pokud není zadána žádná možnost zarovnání, zarovná se napravo od zbývajících mezer. (U řetězců je zarovnáno doleva.)
  • Část po „.“ (3) zkrátí desetinnou část (2346) až na dané číslo. V tomto případě je 2346 zkrácen po 3 místech.
    Zbývající čísla (46) jsou zaokrouhleny na výstup 235.

Pro argumenty klíčových slov

Argumenty klíčových slov

Stejný příklad jsme použili výše, abychom ukázali rozdíl mezi klíčovým slovem a pozičními argumenty.

Zde jsme místo parametrů použili pouze pár klíč – hodnota pro parametry. Jmenovitě name = "Adam" a blc = 230.2346.

Vzhledem k tomu, že na tyto parametry odkazují jejich klíče jako (name) a (blc: 9.3f), jsou známé jako klíčové slovo nebo pojmenované argumenty.

Vnitřně,

  • Zástupný symbol (jméno) je nahrazen hodnotou jména - „Adam“. Protože neobsahuje žádné další kódy formátu, je umístěn „Adam“.
  • U argumentu blc = 230.2346 je zástupný symbol (blc: 9.3f) nahrazen hodnotou 230.2346. Ale před jeho výměnou, stejně jako v předchozím příkladu, provede na něm operaci 9.3f.
    To má na výstupu 230 235. Desetinná část je po 3 místech zkrácena a zbývající číslice jsou zaokrouhleny. Podobně je celkové šířce přiřazeno 9, přičemž vlevo jsou dvě mezery.

Základní formátování pomocí formátu ()

format()Metoda umožňuje použití jednoduchých zástupných symbolů pro formátování.

Příklad 1: Základní formátování pro výchozí, poziční a klíčové argumenty

 # 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ýstup

Dobrý den Adam, váš zůstatek je 230 2346. Dobrý den Adam, váš zůstatek je 230 2346. Dobrý den Adam, váš zůstatek je 230 2346. Dobrý den Adam, váš zůstatek je 230 2346.

Poznámka: V případě smíšených argumentů musí argumenty klíčových slov vždy následovat poziční argumenty.

Formátování čísel pomocí formátu ()

Čísla můžete formátovat pomocí níže uvedeného specifikátoru formátu:

Typy formátování čísel
Typ Význam
d Desetinné celé číslo
C Odpovídající znak Unicode
b Binární formát
Ó Osmičkový formát
X Šestnáctkový formát (malá písmena)
X Šestnáctkový formát (velká písmena)
n Stejné jako 'd'. Kromě toho, že používá aktuální nastavení národního prostředí pro oddělovač čísel
E Exponenciální notace. (malá písmena 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átování čísla se zarovnáním

Operátory and =se používají k zarovnání, když je číslům přiřazena určitá šířka.

Formátování čísla se zarovnáním
Typ Význam
< Zarovnáno doleva ke zbývajícímu prostoru
^ Střed zarovnán se zbývajícím prostorem
> Zarovnáno doprava do zbývajícího prostoru
= Vynutí znaménko (+) (-) do polohy nejvíce vlevo

Příklad 5: Formátování čísel s levým, pravým a středovým zarovnáním

 # 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ýstup

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

Poznámka: Zarovnání doleva vyplněné nulami pro celá čísla může způsobit problémy, protože 3. příklad, který vrací 12 000, místo 12.

Formátování řetězců pomocí format ()

Jako čísla lze řetězec formátovat podobným způsobem jako 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 také použít objekty __str__()a __repr__()funkce se zkratkovými notacemi pomocí format().

Stejně jako __format__()můžete snadno přepsat objekty __str__()a __repr_()metody.

Příklad 12: __str () __ a __repr () __ zkratka! R a! S pomocí 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ýstup

 Citáty: „kočka“, bez uvozovek: kočka repr: REPR, str: STR 

Zajímavé články...