English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base Python

Controllo dei flussi Python

Funzione in Python

Tipi di dati in Python

Operazioni di file Python

Oggetti e classi Python

Data e ora Python

Conoscenze avanzate Python

Manuale di riferimento Python

Utilizzo e esempio del metodo format() delle stringhe Python

Metodi di stringa di Python

Il metodo format() della stringa Python formatta i valori specificati e li inserisce all'interno dei segnaposto della stringa.

Attenzione: 

La stringa \

Le parentesi graffe sono solo segnaposto per i parametri da inserire. Nell'esempio sopra, {0} è il segnaposto per "Adam", {1:9.3f} è il segnaposto per 230.2346.

Poiché le stringhe di modello citano i parametri format() come {0} e {1}, questi parametri sono parametri di posizione. Possono anche essere citati senza numero, perché {} e Python li trasformano internamente in numeri.

All'interno di

  • Poiché "Adam" è il 0 unitàParametro, quindi viene messo nel posto {0}. Poiché {0} non contiene altri codici di formato, non esegue altre operazioni.

  • Tuttavia, il primo parametro 230.2346 non è così. In questo caso, {1:9.3f} mette 230.2346 nel suo posto e esegue l'operazione 9.3f.

  • f specifica che sta elaborando un numero a virgola mobile. Se non viene specificato correttamente, emette un errore.

  • La parte prima di ".". (9) La larghezza minima/padding utilizzabile per specificare il numero (230.2346). In questo caso, 230.2346 viene assegnato almeno 9 posizioni, inclusa ".".
    Se non viene specificata un'opzione di allineamento, viene allineato a destra rispetto agli altri spazi vuoti. (Per le stringhe, si allinea a sinistra.)

  • La parte dopo il "." (3) tronca la parte decimale (2346) al numero specificato. In questo caso, dopo 3346 viene troncata 2346.
    Il numero rimanente (46) viene arrotondato, e l'output è 235.

Per i parametri a chiave

Abbiamo utilizzato lo stesso esempio sopra per illustrare la differenza tra parametri a chiave e a posizione.

Qui, oltre a utilizzare i parametri, utilizziamo anche i valori chiave come parametri. Ossia name="Adam" e blc=230.2346.

Poiché questi parametri sono riferiti dai loro chiavi come {name} e {blc:9.3f}, vengono chiamati parametri a chiave o parametri a nome.

All'interno di

  • Il segnaposto {name} viene sostituito con il valore di name - “Adam”. Poiché non contiene alcun altro codice di formattazione, viene inserito “Adam”.

  • Per il parametro blc = 230.2346, il segnaposto {blc:9.3f} viene sostituito con il valore 230.2346. Tuttavia, prima di sostituirlo, lo esegue come nel esempio precedente con 9.3f.
    L'output è 230.235. La parte decimale viene troncata dopo 3 cifre, e il resto dei numeri viene arrotondato. Allo stesso modo, la larghezza totale è assegnata a 9, lasciando due spazi sulla sinistra.

Formattazione di base con format()

Il metodo format() permette di utilizzare segnaposto semplici per la formattazione.

Esempio 1: Formattazione di base, parametri predefiniti, posizionali e a chiave

# Parametri predefiniti
print("Ciao {}, il tuo saldo è {}.".format("Adam", 230.2346))
# Parametri a posizione
print("Ciao {0}, il tuo saldo è {1}.".format("Adam", 230.2346))
# Parametri a chiave
print("Ciao {name}, il tuo saldo è {blc}.".format(name="Adam", blc=230.2346))
# Parametri misti
print("Ciao {0}, il tuo saldo è {blc}.".format("Adam", blc=230.2346))

Quando si esegue questo programma, tutte le uscite saranno le stesse:

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.

Attenzione:Per i parametri misti, i parametri a chiave devono sempre seguire i parametri a posizione.

Formattazione dei numeri con format()

Puoi impostare il formato numerico utilizzando i segnaposto di formato elencati di seguito:

tipi di formato numerico
TipoSignificato
dintero decimale
cil carattere Unicode corrispondente
bformato binario
oFormato ottale
xFormato esadecimale (in minuscolo)
XFormato esadecimale (in maiuscolo)
nUguale a "d" ma utilizza il separatore numerico dell'ambiente linguistico corrente.
eRappresentazione esponenziale. (Lettera minuscola e)
ESimbolo esponenziale (in maiuscolo E)
fMostra il numero a virgola fissa (predefinito: 6)
FUguale a "f" ma mostra "inf" come "INF" e "nan" come "NAN".
gFormato universale. Arrotonda il numero a p cifre significative. (Precisione predefinita: 6)
GUguale a "g" ma, se la quantità è molto grande, cambia in "E".
%Percentuale. Moltiplicare per 100 e terminare con %.

Esempio 2: Formattazione numerica semplice

# Parametro numero intero
print("Numero:{:d}".format(123))
# Parametro numero a virgola mobile
print("Numero a virgola mobile:{:f}".format(123.4567898))
# Formattazione ottale, binaria e esadecimale
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12))

当您运行该程序时,输出将是:

Numero: 123
Numero a virgola mobile:123.456790
bin: 1100, oct: 14, hex: c

Esempio 3: Formattazione dei numeri con int e float

# Larghezza minima per gli interi
print("{:5d}".format(12))
# La larghezza non ha effetto sui numeri più lunghi del riempimento
print("{:2d}".format(1234))
# Riempimento dei numeri a virgola mobile
print("{:8.3f}".format(12.2346))
# Larghezza minima per gli interi
print("{:05d}".format(12))
# Riempimento con zero
print("{:08.3f}".format(12.2346))

当您运行该程序时,输出将是:

   121234  12.235000120012.235

Ecco qui:

  • Nel primo comando, {:5d} utilizza un parametro intero e specifica una larghezza minima di 5. Poiché non è stato specificato il modo di allineamento, si allinea a destra.

  • Nel secondo comando, si può vedere che la larghezza (2) è inferiore al numero (1234), quindi non è necessario lasciare spazi a sinistra né troncare il numero.

  • A differenza degli interi, i numeri a virgola mobile hanno una parte intera e una parte decimale. E, la larghezza minima definita per questo numero è l'intera parte inclusa il ".".

  • Nel terzo comando, {:8.3f} tronca la parte decimale a 3 cifre e arrotonda gli ultimi due numeri. Inoltre, il numero ora è 12.235, con una larghezza totale di 8 e 2 posizioni riservate a sinistra.

  • Se si desidera riempire il resto con zero, posizionare lo zero prima del simbolo di formato. È applicabile sia agli interi che ai numeri a virgola mobile: {:05d} e {:08.3f}.

Esempio 4: Formattazione dei numeri con segno

# Mostra il segno +
print("{:+f} {:+f}".format(12.23, -12.23))
# Mostra solo il segno -
print("{:-f} {:-f}".format(12.23, -12.23))
# Spazio vuoto per il segno +
print("{: f} {: f}".format(12.23, -12.23))

当您运行该程序时,输出将是:

+12.230000 -12.230000
12.230000 -12.230000 12.230000 -12.230000

Formattazione dei numeri

Quando si specifica una larghezza determinata per un numero, i segni < e = utilizzati per l'allineamento.

Formattazione dei numeri
TipoSignificato
<Allineamento a sinistra dello spazio rimanente
^Allineamento centrato dello spazio rimanente
>Allineamento a destra dello spazio rimanente
=Forzare il segno (+)(-) più a sinistra

Esempio 5: Formattazione dei numeri a sinistra, a destra e centrati

# Interi a destra
print("{:5d}".format(12))
# Numeri a virgola mobile centrati
print("{:^10.3f}".format(12.2346))
# Interi a sinistra, riempiti con 0
print("{:<05d}".format(12))
# Numeri a virgola mobile centrati
print("{:=8.3f}".format(-12.2346))

当您运行该程序时,输出将是:

   12  12.235  12000- 12.235

Attenzione:Per il terzo esempio, riempire l'intero a sinistra con zero potrebbe causare problemi, il esempio restituisce 12000 invece di 12.

Formattazione della stringa utilizzando format()

Come numero, è possibile formattare la stringa utilizzando format() in modo simile.

Esempio 6: Formattazione della stringa con riempimento e allineamento

# Riempimento a sinistra della stringa
print("{:5}".format("cat"))
# Riempimento a destra della stringa
print("{:>5}".format("cat"))
# Riempimento centrato della stringa
print("{:^5}".format("cat"))
# Riempimento centrato della stringa
# e '*' caratteri di riempimento
print("{:*^5}".format("cat"))

当您运行该程序时,输出将是:

cat    cat cat *cat*

Esempio 7: Troncare la stringa utilizzando format()

# 将字符串截断为3个字母
print("{:.3}".format("caterpillar"))
# 将字符串截断为3个字母
# 和 填充
print("{:5.3}".format("caterpillar"))
# 将字符串截断为3个字母,
# 填充和中心对齐
print("{:^5.3}".format("caterpillar"))

当您运行该程序时,输出将是:

catcat     cat

使用format()格式化类和字典成员

Python内部getattr()以“ .age”形式用于类成员。并且,它使用__getitem__()查找“[index]”形式的字典成员。

示例8:使用format()格式化类成员

# define Person class
class Person:
    age = 23
    name = "Adam"
# 格式化age
print("{p.name}年龄是 : {p.age}".format(p=Person()))

当您运行该程序时,输出将是:

Adam's 年龄是 : 23

在这里,Person对象作为关键字参数p传递。

在模板字符串中,分别使用.name和.age访问Person的name和age。

示例9:使用format()格式化字典成员

# 定义Person字典
person = {'age': 23, 'name': 'Adam'}
# 格式化age
print("{p[name]}'s age is: {p[age]}".format(p=person))

当您运行该程序时,输出将是:

Adam's age is: 23

与class类似,person字典作为关键字参数p传递。

在模板字符串中,分别使用[name]和[age]访问人员的name和age。

有一种更简单的方法可以使用Python格式化字典str.format(**mapping)。

# 定义Person字典
person = {'age': 23, 'name': 'Adam'}
# 格式化age
print("{name}'s age is: {age}".format(**person))

** 是格式参数(最小字段宽度)。

使用format()作为格式代码的参数

您还可以动态传递格式代码,例如精度,对齐,填充字符作为位置或关键字参数。

示例10:使用format()的动态格式化

# 动态字符串格式模板
string = "{:{fill}{align}{width}}"
# Passaggio dei codici di formattazione come parametri
print(string.format('cat', fill='*', align='^', width=5))
# Modello di formattazione a virgola mobile dinamico
num = "{:{align}{width}.{precision}f}"
# Passaggio dei codici di formattazione come parametri
print(num.format(123.236, align='<', width=8, precision=2))

Quando si esegue questo programma, l'output è:

**cat**123.24

Ecco qui:

  • Nel primo esempio, "cat" è un parametro di posizione da formattare. Allo stesso modo, fill='*' e align='^' e width=5 sono parametri chiave.

  • Nei modelli di stringa, questi parametri chiave non sono come stringhe normali da stampare, ma come codici di formattazione effettivi检索fill, align e width.
    I parametri sostituiranno i rispettivi segnaposto denominati, e la stringa "cat" verrà formattata di conseguenza.

  • Analogamente, nel secondo esempio, 123.236 è un parametro di posizione, e align, width e precision sono passati come codici di formattazione alla stringa modello.

Altre opzioni di formattazione con format()

format() supporta anche opzioni di formattazione specifiche del tipo, come la formattazione delle date/ora e dei numeri complessi.

format() chiama internamente __format__ da datetime, mentre format() accede alle proprietà dei numeri complessi.

Puoi facilmente sovrascrivere il metodo __format__ di qualsiasi oggetto per impostare la formattazione personalizzata.

Esempio 11: Formattazione specifica del tipo utilizzando format() e la sovrascrittura di __format__

import datetime
# Formattazione della data e dell'ora
date = datetime.datetime.now()
print("Ora corrente: {:%Y/%m/%d %H:%M:%S}".format(date))
# Formattazione dei numeri complessi
complexNumber = 1+2j
print("Parte reale: {0.real} e parte immaginaria: {0.imag}".format(complexNumber))
# Metodo __format__() personalizzato
class Person:
    def __format__(self, format):
        if(format == 'age'):
            return '23'
        return 'None'
print("L'età di Adam è: {:age}".format(Person()))

Quando si esegue questo programma, l'output è:

Ora corrente: 2020/04/17 14:33:02
Parte reale: 1.0 e parte immaginaria: 2.0
L'età di Adam è: 23

Ecco qui:

  • Per datetime:
    La data e l'ora corrente vengono passate come argomento posizionale al metodo format().
    E, internamente utilizzando il metodo __format__(), format() può accedere all'anno, mese, giorno, ora, minuto e secondo.

  • Per i numeri complessi:
    1 + 2j viene convertito internamente in un oggetto ComplexNumber.
    Poi accedi alle sue proprietà real e imag, i numeri vengono formati.

  • Riscrittura di __format__():
    Come datetime, è possibile riscrivere il proprio metodo __format__() per la formattazione personalizzata, che restituirà l'età quando si accede a {age}

È anche possibile utilizzare le funzionalità __str__() e __repr__() degli oggetti, utilizzando la notazione abbreviata di format().

Come __format__(), è possibile riscrivere facilmente i metodi __str__() e __repr__() degli oggetti.

Esempio 12: Utilizzo di __str__() e __repr__() abbreviati in !r e !s con format()

# __str__() e __repr__() abbreviati in !r e !s
print("Citazioni: {0!r}, Senza citazioni: {0!s}".format("cat"))
# Implementazione di __str__() e __repr__() per la classe
class Person:
    def __str__(self):
        return "STR"
    def __repr__(self):
        return "REPR"
print("repr: {p!r}, str: {p!s}".format(p=Person()))

Quando si esegue questo programma, l'output è:

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

Metodi di stringa di Python