Python format niza ()

Metoda string format () formatira zadani niz u ljepši izlaz u Pythonu.

Sintaksa format()metode je:

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

Ovdje su p0, p1, … pozicijski argumenti, a k0, k1,… argumenti ključnih riječi s vrijednostima v0, v1,….

Predložak je mješavina kodova formata s rezerviranim mjestima za argumente.

Parametri formata niza ()

format()metoda uzima bilo koji broj parametara. Ali, podijeljen je u dvije vrste parametara:

  • Pozicijski parametri - popis parametara kojima se može pristupiti s indeksom parametra unutar kovrčavih zagrada(index)
  • Parametri ključne riječi - popis parametara tipa key = value, kojima se može pristupiti ključem parametra unutar kovrčavih zagrada(key)

Vrati vrijednost iz String formata ()

format()Metoda vraća formatiran string.

Kako funkcionira format String ()?

format()Čita tip argumenata donesenih na njega i formate u skladu s formatom kodove definiranih u nizu.

Za pozicijske argumente

Pozicijski argumenti

Ovdje je Argument 0 niz "Adam", a Argument 1 plutajući broj 230.2346.

Napomena: Popis argumenata započinje od 0 u Pythonu.

Niz "Hello (0), your balance is (1:9.3f)"je niz predloška. Sadrži kodove formata za formatiranje.

Vitičaste zagrade samo su rezervirana mjesta za postavljanje argumenata. U gornjem primjeru, (0) je rezervirano mjesto za "Adama", a (1: 9.3f) je rezervirano mjesto za 230.2346.

Budući da se predložak u nizu poziva na format()argumente kao (0)i (1), argumenti su položajni argumenti. Oboje se također mogu pozivati ​​bez brojeva jer ih ()Python interno pretvara u brojeve.

Interno,

  • Budući da je "Adam" 0- ti argument, on je postavljen na mjesto (0). Budući (0)da ne sadrži druge kodove formata, ne izvodi nikakve druge radnje.
  • Međutim, to nije slučaj za 1 st argument 230.2346. Ovdje (1:9.3f)postavlja 230.2346 na svoje mjesto i izvodi operaciju 9.3f.
  • f određuje format koji se odnosi na plutajući broj. Ako nije točno naznačeno, pojavit će se pogreška.
  • Dio prije znaka "." (9) određuje minimalnu širinu / obloge koje broj (230.2346) može uzeti. U ovom slučaju, 230.2346 dodijeljeno je najmanje 9 mjesta, uključujući "."
    Ako nije navedena opcija poravnanja, poravnava se desno od preostalih prostora. (Za žice je poravnato ulijevo.)
  • Dio nakon znaka "." (3) skraćuje decimalni dio (2346) do zadanog broja. U ovom je slučaju 2346 skraćen nakon 3 mjesta.
    Preostali brojevi (46) zaokružuju se na izlaz 235.

Za argumente ključnih riječi

Argumenti ključnih riječi

Isti smo primjer odozgo upotrijebili kako bismo pokazali razliku između ključnih riječi i pozicijskih argumenata.

Ovdje smo umjesto parametara koristili ključ / vrijednost za parametre. Naime, ime = "Adam" i blc = 230,2346.

Budući da se na te parametre ključevi pozivaju kao (ime) i (blc: 9.3f), poznati su kao ključni podaci ili imenovani argumenti.

Interno,

  • Rezervirano mjesto (ime) zamjenjuje se vrijednošću imena - "Adam". Budući da ne sadrži nikakve druge kodove formata, postavlja se "Adam".
  • Za argument blc = 230.2346, rezervirano mjesto (blc: 9.3f) zamjenjuje se vrijednošću 230.2346. Ali prije nego što ga zamijeni, kao prethodni primjer, izvršava operaciju 9.3f na njemu.
    Ovo daje 230.235. Decimalni dio skraćen je nakon 3 mjesta, a preostale znamenke zaokružene su. Isto tako, ukupna širina je dodijeljena 9, ostavljajući dva razmaka lijevo.

Osnovno formatiranje s formatom ()

format()Metoda omogućuje korištenje jednostavnih rezervirana za oblikovanje.

Primjer 1: Osnovno oblikovanje za zadane, pozicijske i ključne riječi

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

Izlaz

Pozdrav Adame, vaše stanje je 230.2346. Pozdrav Adame, vaše stanje je 230.2346. Pozdrav Adame, vaše stanje je 230.2346. Pozdrav Adame, vaše stanje je 230.2346.

Napomena: U slučaju miješanih argumenata, argumenti ključne riječi moraju uvijek slijediti položajne argumente.

Formatiranje brojeva u formatu ()

Brojeve možete formatirati pomoću dolje navedenog specifikatora formata:

Vrste formatiranja brojeva
Tip Značenje
d Decimalni cijeli broj
c Odgovarajući Unicode znak
b Binarni format
o Oktalni format
x Heksadecimalni format (mala slova)
x Heksadecimalni format (velika slova)
n Isto kao i "d". Osim što koristi trenutnu lokalnu postavku za separator broja
e Eksponencijalni zapis. (mala 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

Oblikovanje brojeva s poravnanjem

Operatori and =se koriste za poravnanje kada se brojevima dodijeli određena širina.

Oblikovanje brojeva s poravnanjem
Tip Značenje
< Lijevo poravnato s preostalim prostorom
^ Poravnato prema sredini s preostalim prostorom
> Desno poravnato s preostalim prostorom
= Potiskuje potpisano (+) (-) u krajnji lijevi položaj

Primjer 5: Oblikovanje brojeva s poravnanjem lijevo, desno i po sredini

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

Izlaz

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

Napomena: Lijevo poravnanje ispunjeno nulama za cjelobrojne brojeve može uzrokovati probleme kao treći primjer koji vraća 12000, a ne 12.

Oblikovanje niza u formatu ()

Kao brojevi, niz se može formatirati na sličan način s 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)

Također možete koristiti objekte __str__()i __repr__()funkcionalnosti sa stenografskim zapisima pomoću format().

Kao __format__(), lako možete nadjačati objekte __str__()i __repr_()metode.

Primjer 12: __str () __ i __repr () __ stenografija! R i! S pomoću formata ()

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

Izlaz

 Citati: 'mačka', Bez citata: mačka rep: REPR, str: STR 

Zanimljivi članci...