„Python“ eilutės formatas ()

Stringo formato () metodas pateiktą eilutę suformatuoja į gražesnę Python išvestį.

format()Metodo sintaksė yra tokia:

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

Čia p0, p1,… yra padėties argumentai, o k0, k1,… yra raktinių žodžių argumentai, kurių reikšmės yra atitinkamai v0, v1,…

Šablonas yra formatų kodų ir argumentų vietos rezervų derinys.

Eilučių formatas () Parametrai

format()metodas apima bet kokį parametrų skaičių. Tačiau yra suskirstytas į du parametrų tipus:

  • Poziciniai parametrai - sąrašas parametrų, prie kurių galima prisijungti naudojant parametrų rodyklę garbanotose petnešose(index)
  • Raktinių žodžių parametrai - tipo key = value parametrų sąrašas, kurį galima pasiekti naudojant parametro raktą garbanotose petnešose(key)

Grąžinimo vertė iš eilutės formato ()

format()Metodas grąžina suformatuoti eilutę.

Kaip veikia „String“ formatas ()?

format()Skaito argumentų praėjo jai tipą ir formatai ją pagal formato kodais apibrėžtų eilutę.

Dėl pozicinių argumentų

Poziciniai argumentai

Čia „Argumentas 0“ yra eilutė „Adomas“, o „Argumentas 1“ - plaukiojantis skaičius 230,2346.

Pastaba: „Python“ argumentų sąrašas prasideda nuo 0.

Eilutė "Hello (0), your balance is (1:9.3f)"yra šablono eilutė. Čia yra formatavimo formato kodai.

Garbanotieji petnešos yra tik vietos, skirtos pateikti argumentams. Ankstesniame pavyzdyje (0) yra „Adam“ vietos rezervavimo ženklas, o (1: 9.3f) yra 230,2346 vietos rezervavimo ženklas.

Kadangi šablono eilutė nurodo format()argumentus kaip (0)ir (1), argumentai yra poziciniai argumentai. Jie abu gali būti nurodyti be skaičių as, ()o „Python“ juos iš vidaus paverčia skaičiais.

Viduje,

  • Kadangi „Adomas“ yra 0 -asis argumentas, jis dedamas vietoje (0). Kadangi (0)jame nėra jokių kitų formatų kodų, jis neatlieka jokių kitų operacijų.
  • Tačiau taip nėra pirmojo argumento 230.2346 atveju. Čia (1:9.3f)įdeda 230,2346 į savo vietą ir atlieka operaciją 9.3f.
  • f nurodo formatą, susijusį su plūdiniu skaičiumi. Jei neteisingai nurodyta, tai duos klaidą.
  • Dalis prieš "." (9) nurodo mažiausią plotį / užpildą, kurio gali prireikti (230.2346). Šiuo atveju 230,2346 skiriama mažiausiai 9 vietos, įskaitant „.“.
    Jei lygybės parinktis nenurodyta, ji sulygiuota dešinėje likusių tarpų. (Styginiams jis sulygiuotas į kairę.)
  • Dalis po "." (3) sutrumpina dešimtainę dalį (2346) iki nurodyto skaičiaus. Šiuo atveju 2346 sutrumpinamas po 3 vietų.
    Likę skaičiai (46) yra suapvalinti ir pateikti 235.

Raktinių žodžių argumentams

Raktinių žodžių argumentai

Mes naudojome tą patį pavyzdį iš viršaus, norėdami parodyti skirtumą tarp raktinių žodžių ir pozicijos argumentų.

Čia vietoje parametrų naudojome parametrų raktinę vertę. Būtent, vardas = „Adomas“ ir blc = 230,2346.

Kadangi šie parametrai nurodomi klavišais kaip (vardas) ir (blc: 9.3f), jie žinomi kaip raktiniai žodžiai arba pavadinti argumentai.

Viduje,

  • Vietos ženklas (vardas) pakeičiamas vardo reikšme - „Adomas“. Kadangi jame nėra jokių kitų formatų kodų, dedamas „Adomas“.
  • Argumentui blc = 230.2346, vietos rezervavimo ženklas (blc: 9.3f) pakeičiamas reikšme 230.2346. Bet prieš jį pakeisdamas, kaip ir ankstesnį pavyzdį, jis atlieka operaciją 9.3f.
    Tai išleidžia 230.235. Dešimtainė dalis sutrumpinama po 3 vietų, o likę skaitmenys suapvalinami. Taip pat bendras plotis priskiriamas 9, paliekant du tarpus kairėje.

Pagrindinis formatavimas naudojant formatą ()

Šis format()metodas leidžia naudoti paprastus vietos rezervavimo ženklus.

1 pavyzdys: Pagrindinis numatytųjų, padėties ir raktinių žodžių argumentų formatavimas

 # 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))

Rezultatas

Sveiki, Adomai, jūsų likutis yra 230,2346. Sveiki, Adomai, jūsų likutis yra 230,2346. Sveiki, Adomai, jūsų likutis yra 230,2346. Sveiki, Adomai, jūsų likutis yra 230,2346.

Pastaba: Jei argumentai yra mišrūs, raktinių žodžių argumentai visada turi atitikti pozicinius argumentus.

Skaičių formatavimas su formatu ()

Skaičius galite formatuoti naudodami toliau pateiktą formato specifikatorių:

Skaičių formatavimo tipai
Tipas Reikšmė
d Dešimtainis sveikasis skaičius
c Atitinkamas „Unicode“ simbolis
b Dvejetainis formatas
o Aštuonkojis formatas
x Šešioliktainis formatas (mažosios raidės)
X Šešioliktainis formatas (didžiosios raidės)
n Tas pats kaip „d“. Išskyrus tai, kad numerių skyrikliui naudojamas dabartinis lokalės nustatymas
e Eksponentinis žymėjimas. (mažosios 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

Skaičių formatavimas su lygiavimu

Operatoriai and =naudojami lygiavimui, kai skaičiams priskiriamas tam tikras plotis.

Skaičių formatavimas su lygiavimu
Tipas Reikšmė
< Kairėje sulyginta su likusia erdve
^ Centras sulygintas su likusia erdve
> Dešinėje sulyginta su likusia erdve
= Priverčia pasirašyti (+) (-) į kairiausią padėtį

5 pavyzdys: skaičių formatavimas sulygiuotas kairėje, dešinėje ir centre

 # 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))

Rezultatas

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

Pastaba: kairysis sulyginimas, užpildytas sveikųjų skaičių nuliais, gali sukelti problemų, nes trečiasis pavyzdys pateikia 12000, o ne 12.

Eilučių formatavimas naudojant formatą ()

Kaip skaičius, eilutes galima suformatuoti panašiai kaip 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)

Taip pat galite naudoti objekto __str__()ir __repr__()funkcionalumą naudodami trumpinių užrašus format().

Panašiai __format__(), jūs galite lengvai nepaisyti objekto __str__()ir __repr_()metodų.

12 pavyzdys: __str () __ ir __repr () __ sutrumpinimas! R ir! S naudojant 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()))

Rezultatas

 Citatos: „katė“, be citatų: katės repr: REPR, str: STR 

Įdomios straipsniai...