English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
Il metodo format() permette di utilizzare segnaposto semplici per la formattazione.
# 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.
Puoi impostare il formato numerico utilizzando i segnaposto di formato elencati di seguito:
Tipo | Significato |
---|---|
d | intero decimale |
c | il carattere Unicode corrispondente |
b | formato binario |
o | Formato ottale |
x | Formato esadecimale (in minuscolo) |
X | Formato esadecimale (in maiuscolo) |
n | Uguale a "d" ma utilizza il separatore numerico dell'ambiente linguistico corrente. |
e | Rappresentazione esponenziale. (Lettera minuscola e) |
E | Simbolo esponenziale (in maiuscolo E) |
f | Mostra il numero a virgola fissa (predefinito: 6) |
F | Uguale a "f" ma mostra "inf" come "INF" e "nan" come "NAN". |
g | Formato universale. Arrotonda il numero a p cifre significative. (Precisione predefinita: 6) |
G | Uguale a "g" ma, se la quantità è molto grande, cambia in "E". |
% | Percentuale. Moltiplicare per 100 e terminare con %. |
# 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
# 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}.
# 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
Quando si specifica una larghezza determinata per un numero, i segni < e = utilizzati per l'allineamento.
Tipo | Significato |
---|---|
< | Allineamento a sinistra dello spazio rimanente |
^ | Allineamento centrato dello spazio rimanente |
> | Allineamento a destra dello spazio rimanente |
= | Forzare il segno (+)(-) più a sinistra |
# 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.
Come numero, è possibile formattare la stringa utilizzando format() in modo simile.
# 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*
# 将字符串截断为3个字母 print("{:.3}".format("caterpillar")) # 将字符串截断为3个字母 # 和 填充 print("{:5.3}".format("caterpillar")) # 将字符串截断为3个字母, # 填充和中心对齐 print("{:^5.3}".format("caterpillar"))
当您运行该程序时,输出将是:
catcat cat
Python内部getattr()以“ .age”形式用于类成员。并且,它使用__getitem__()查找“[index]”形式的字典成员。
# 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。
# 定义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))
** 是格式参数(最小字段宽度)。
您还可以动态传递格式代码,例如精度,对齐,填充字符作为位置或关键字参数。
# 动态字符串格式模板 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.
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.
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.
# __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