Formato stringa Python ()

Il metodo string format () formatta la stringa data in un output migliore in Python.

La sintassi del format()metodo è:

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

Qui, p0, p1,… sono argomenti posizionali e, k0, k1,… sono argomenti di parole chiave con valori v0, v1,… rispettivamente.

Inoltre, il modello è una combinazione di codici di formato con segnaposto per gli argomenti.

String format () Parametri

format()il metodo accetta un numero qualsiasi di parametri. Ma è diviso in due tipi di parametri:

  • Parametri posizionali : elenco di parametri a cui è possibile accedere con l'indice del parametro all'interno di parentesi graffe(index)
  • Parametri parola chiave - elenco di parametri di tipo chiave = valore, a cui è possibile accedere con la chiave del parametro all'interno di parentesi graffe(key)

Valore restituito dal formato String ()

Il format()metodo restituisce la stringa formattata.

Come funziona String format ()?

La format()legge il tipo di argomenti passati ad esso e formati in base ai codici di formato definito nella stringa.

Per argomenti posizionali

Argomenti posizionali

Qui, Argomento 0 è una stringa "Adam" e Argomento 1 è un numero variabile 230.2346.

Nota: l' elenco degli argomenti inizia da 0 in Python.

La stringa "Hello (0), your balance is (1:9.3f)"è la stringa del modello. Contiene i codici di formato per la formattazione.

Le parentesi graffe sono solo segnaposto per gli argomenti da posizionare. Nell'esempio precedente, (0) è il segnaposto per "Adam" e (1: 9.3f) è il segnaposto per 230.2346.

Poiché la stringa del modello fa riferimento agli format()argomenti come (0)e (1), gli argomenti sono argomenti posizionali. Entrambi possono anche essere referenziati senza i numeri ()e Python li converte internamente in numeri.

Internamente,

  • Poiché "Adam" è lo 0 ° argomento, viene posto al posto di (0). Poiché (0)non contiene altri codici di formato, non esegue altre operazioni.
  • Tuttavia, non è il caso di 1 ° argomento 230,2346. Qui, (1:9.3f)pone 230.2346 al suo posto ed esegue l'operazione 9.3f.
  • f specifica che il formato ha a che fare con un numero float. Se non specificato correttamente, restituirà un errore.
  • La parte prima del "." (9) specifica la larghezza / imbottitura minima che il numero (230.2346) può assumere. In questo caso a 230.2346 sono assegnati un minimo di 9 posti compreso il ".".
    Se non viene specificata alcuna opzione di allineamento, viene allineata a destra degli spazi rimanenti. (Per le stringhe, è allineato a sinistra.)
  • La parte dopo il "." (3) tronca la parte decimale (2346) fino al numero specificato. In questo caso, 2346 viene troncato dopo 3 posizioni.
    I numeri rimanenti (46) vengono arrotondati con 235.

Per argomenti di parole chiave

Argomenti delle parole chiave

Abbiamo usato lo stesso esempio visto sopra per mostrare la differenza tra parole chiave e argomenti posizionali.

Qui, invece dei soli parametri, abbiamo utilizzato un valore-chiave per i parametri. Vale a dire, name = "Adam" e blc = 230.2346.

Poiché questi parametri sono referenziati dalle loro chiavi come (nome) e (blc: 9.3f), sono noti come parole chiave o argomenti con nome.

Internamente,

  • Il segnaposto (nome) è sostituito dal valore di nome - "Adam". Poiché non contiene altri codici di formato, viene inserito "Adam".
  • Per l'argomento blc = 230.2346, il segnaposto (blc: 9.3f) è sostituito dal valore 230.2346. Ma prima di sostituirlo, come nell'esempio precedente, esegue l'operazione 9.3f su di esso.
    Questo produce 230.235. La parte decimale viene troncata dopo 3 posizioni e le cifre rimanenti vengono arrotondate. Allo stesso modo, la larghezza totale viene assegnata a 9 lasciando due spazi a sinistra.

Formattazione di base con format ()

Il format()metodo consente l'uso di semplici segnaposto per la formattazione.

Esempio 1: formattazione di base per argomenti predefiniti, posizionali e parole chiave

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

Produzione

Ciao Adam, il tuo saldo è 230.2346. Ciao Adam, il tuo saldo è 230.2346. Ciao Adam, il tuo saldo è 230.2346. Ciao Adam, il tuo saldo è 230.2346.

Nota: in caso di argomenti misti, gli argomenti delle parole chiave devono sempre seguire gli argomenti posizionali.

Formattazione dei numeri con format ()

È possibile formattare i numeri utilizzando l'identificatore di formato fornito di seguito:

Tipi di formattazione dei numeri
genere Senso
d Numero intero decimale
c Carattere Unicode corrispondente
b Formato binario
o Formato ottale
X Formato esadecimale (minuscolo)
X Formato esadecimale (maiuscolo)
n Uguale a "d". Tranne che utilizza l'impostazione locale corrente per il separatore di numeri
e Notazione esponenziale. (e minuscola)
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

Formattazione del numero con allineamento

Gli operatori and =vengono utilizzati per l'allineamento quando viene assegnata una certa larghezza ai numeri.

Formattazione del numero con allineamento
genere Senso
< Allineato a sinistra con lo spazio rimanente
^ Centro allineato allo spazio rimanente
> Allineato a destra con lo spazio rimanente
= Forza il segno (+) (-) nella posizione più a sinistra

Esempio 5: formattazione dei numeri con allineamento a sinistra, a destra e al centro

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

Produzione

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

Nota: l' allineamento a sinistra riempito con zeri per i numeri interi può causare problemi poiché il 3 ° esempio che restituisce 12000, anziché 12.

Formattazione delle stringhe con format ()

Come numeri, la stringa può essere formattata in modo simile con 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)

Puoi anche usare oggetti __str__()e __repr__()funzionalità con notazioni abbreviate usando format().

Ad esempio __format__(), puoi facilmente sovrascrivere i metodi __str__()e gli oggetti __repr_().

Esempio 12: __str () __ e __repr () __ stenografia! R e! S usando 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()))

Produzione

 Citazioni: 'cat', Senza virgolette: cat repr: REPR, str: STR 

Articoli interessanti...