Format Python String ()

Metoda string format () formează șirul dat într-o ieșire mai frumoasă în Python.

Sintaxa format()metodei este:

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

Aici, p0, p1, … sunt argumente poziționale și, k0, k1, … sunt argumente de cuvinte cheie cu valori v0, v1, respectiv ….

Și, șablonul este un amestec de coduri de format cu substituenți pentru argumente.

Format șir () Parametri

format()metoda ia orice număr de parametri. Dar, este împărțit în două tipuri de parametri:

  • Parametrii poziționali - lista parametrilor care pot fi accesați cu indexul parametrilor în interiorul acoladelor(index)
  • Parametrii cuvintelor cheie - lista parametrilor de tip cheie = valoare, care pot fi accesate cu cheia parametrului în interiorul acoladelor(key)

Returnează valoarea din formatul String ()

format()Metoda returnează șirul de formatat.

Cum funcționează formatul String ()?

format()Citește tipul de argumente transmise acestuia și formatează în conformitate cu codurile de format definite în șir.

Pentru argumente poziționale

Argumente poziționale

Aici, Argumentul 0 este un șir „Adam”, iar Argumentul 1 este un număr plutitor 230.2346.

Notă: lista de argumente începe de la 0 în Python.

Șirul "Hello (0), your balance is (1:9.3f)"este șirul șablon. Acesta conține codurile de formatare pentru formatare.

Aparatele dentare sunt doar substituenți pentru argumentele care trebuie plasate. În exemplul de mai sus, (0) este substituent pentru „Adam” și (1: 9.3f) este substituent pentru 230.2346.

Deoarece șirul șablon face referire la format()argumente ca (0)și (1), argumentele sunt argumente poziționale. Ambele pot fi, de asemenea, menționate fără numere, ()iar Python le convertește intern în numere.

Intern,

  • Din moment ce „Adam“ este 0 - lea argument, acesta este plasat în locul (0). Deoarece (0)nu conține alte coduri de format, nu efectuează alte operații.
  • Cu toate acestea, nu este cazul primului argument 230.2346. Aici, (1:9.3f)plasează 230.2346 în locul său și efectuează operația 9.3f.
  • f specifică faptul că formatul are de-a face cu un număr float. Dacă nu este specificat corect, va apărea o eroare.
  • Partea dinaintea „.” (9) specifică lățimea minimă / umplutura pe care o poate lua numărul (230.2346). În acest caz, 230.2346 are alocate minimum 9 locuri, inclusiv „.”.
    Dacă nu este specificată nicio opțiune de aliniere, aceasta este aliniată la dreapta spațiilor rămase. (Pentru șiruri, este aliniat la stânga.)
  • Partea de după „.” (3) trunchiază partea zecimală (2346) până la numărul dat. În acest caz, 2346 este trunchiat după 3 locuri.
    Numerele rămase (46) sunt rotunjite pentru a da 235.

Pentru argumente de cuvinte cheie

Argumente pentru cuvinte cheie

Am folosit același exemplu de mai sus pentru a arăta diferența dintre cuvintele cheie și argumentele poziționale.

Aici, în loc doar de parametri, am folosit o valoare-cheie pentru parametri. Și anume, nume = "Adam" și blc = 230.2346.

Deoarece acești parametri sunt menționați de cheile lor ca (nume) și (blc: 9.3f), aceștia sunt cunoscuți ca cuvinte cheie sau argumente numite.

Intern,

  • Substituentul (nume) este înlocuit cu valoarea numelui - „Adam”. Deoarece nu conține alte coduri de format, este plasat „Adam”.
  • Pentru argumentul blc = 230.2346, substituentul (blc: 9.3f) este înlocuit cu valoarea 230.2346. Dar înainte de a-l înlocui, ca în exemplul anterior, acesta efectuează operația 9.3f pe acesta.
    Aceasta produce 230.235. Partea zecimală este tăiată după 3 poziții, iar cifrele rămase sunt rotunjite. La fel, lățimea totală este alocată 9 lăsând două spații la stânga.

Formatare de bază cu format ()

format()Metoda permite utilizarea substituenților simplu pentru formatare.

Exemplul 1: formatarea de bază pentru argumentele implicite, poziționale și cuvinte cheie

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

Ieșire

Bună ziua Adam, soldul tău este 230.2346. Bună ziua Adam, soldul tău este 230.2346. Bună ziua Adam, soldul tău este 230.2346. Bună ziua Adam, soldul tău este 230.2346.

Notă: În cazul argumentelor mixte, argumentele cuvintelor cheie trebuie să urmeze întotdeauna argumentele poziționale.

Formatarea numerelor cu format ()

Puteți formata numerele folosind specificatorul de format dat mai jos:

Tipuri de formatare a numerelor
Tip Sens
d Număr întreg zecimal
c Caracter Unicode corespunzător
b Format binar
o Format octal
X Format hexazecimal (minuscule)
X Format hexazecimal (majuscule)
n La fel ca „d”. Cu excepția faptului că folosește setarea locală curentă pentru separatorul de numere
e Notă exponențială. (minuscule 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

Formatarea numerelor cu alinierea

Operatorii and =sunt folosiți pentru aliniere atunci când li se atribuie o anumită lățime numerelor.

Formatarea numerelor cu alinierea
Tip Sens
< Stânga aliniată la spațiul rămas
^ Centrat aliniat la spațiul rămas
> Aliniat dreapta la spațiul rămas
= Forțează semnul (+) (-) în poziția din stânga

Exemplul 5: formatarea numerelor cu aliniere la stânga, la dreapta și la centru

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

Ieșire

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

Notă: Alinierea la stânga umplută cu zerouri pentru numerele întregi poate provoca probleme ca al treilea exemplu care returnează 12000, mai degrabă decât 12.

Formatarea șirului cu format ()

Ca numere, șirul poate fi formatat în mod similar cu 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)

Puteți utiliza, de asemenea, obiectul __str__()și __repr__()funcționalitatea cu notații de tip stenogramă folosind format().

De exemplu __format__(), puteți înlocui cu ușurință obiectele __str__()și __repr_()metodele.

Exemplul 12: __str () __ și __repr () __ stenografie! R și! S folosind 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()))

Ieșire

 Citate: 'pisica', Fara Citate: pisica repr: REPR, str: STR 

Articole interesante...