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

Introduzione dettagliata di str.format di string formatting in Python

introduzione

Python ha aggiunto una nuova metodo di formattazione delle stringhe nella versione 2.6: str.format(). La sua sintassi di base utilizza {} e : per sostituire il %. precedenti.

sintassi dei segnaposto durante la formattazione:

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

regola di "mappatura"

attraverso la posizione

str.format() può accettare un numero non limitato di parametri, la posizione non deve essere ordinata:

>>> "{0} {1}".format("hello", "world")
'hello world'
>>> "{} {}".format("hello", "world")
'hello world'
>>> "{1} {0} {1}".format("hello", "world")
'mondo hello mondo'

attraverso i parametri chiave

quando si utilizzano parametri chiave, la stringa deve fornire il nome del parametro:

>>> "Io sono {name}, l'età è {age}".format(name="huoty", age=18)
'Io sono huoty, l'età è 18'
>>> user = {"name": "huoty", "age": 18}
>>> "Io sono {name}, l'età è {age}".format(**user)
'Io sono huoty, l'età è 18'

attraverso le proprietà dell'oggetto

str.format() può leggere direttamente le proprietà dell'utente:

>>> class User(object):
...  def __init__(self, name, age):
...   self.name = name
...   self.age = age
...   
...  def __str__(self):
...   return "{self.name}({self.age})".format(self=self)
...  
...  def __repr__(self):
...   return self.__str__()
...  
...
>>> user = User("huoty", 18)
>>> user
huoty(18)
>>> "Io sono {user.name}, l'età è {user.age}".format(user=user)
'Io sono huoty, l'età è 18'

attraverso gli indici

all'interno di una stringa da formattare puoi accedere agli elementi tramite indici:

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8]
>>> "Io sono {0[0]}, l'età è {1[2]}".format(names, ages)
'Io sono huoty, l'età è 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "Io sono {names[0]}, l'età è {ages[0]}".format(**users)

specificazione della conversione

puoi specificare il tipo di conversione della stringa:

 conversion ::= "r" | "s" | "a"

其中 "!r" 对应 repr(); "!s" 对应 str(); "!a" 对应 ascii()。 示例:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

其中 "!r" 对应 repr(); "!s" 对应 str(); "!a" 对应 ascii()。 示例:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')

"repr() shows quotes: 'test1'; str() doesn't: test2"

格式限定符
填充与对齐
填充常跟对齐一起使用。^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
>>> "{:>8}".format("181716")
' 181716'
>>> "{:0>8}".format("181716")
'00181716'
>>> "{:->8}".format("181716")
'--181716'
>>> "{:-<8}".format("181716")
'181716--'
>>> "{:-^8}".format("181716")

'-181716-'

>>> "{:-<25}>".format("Here ")

'Here -------------------->'
浮点精度
用 f 表示浮点类型,并可以在其前边加上精度控制:
>>> "[ {:.2f} ]".format(321.33345)
>>> "[ {:.1f} ]".format(321.33345)
>>> "[ {:.4f} ]".format(321.33345)
>>> "[ {:.4f} ]".format(321)
'[ 321.0000 ]'

还可以为浮点数指定符号,+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格,在幅负数前加 -;- 与什么都不加({:f})时一致:

>>> '{:+f}; {:+f}'.format(3.141592657, -3.141592657)
'+3.141593; -3.141593'
>>> '{: f}; {: f}'.format(3.141592657, -3.141592657)
' 3.141593; -3.141593'
>>> '{:f}; {:f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:-f}; {:-f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:+.4f}; {:+.4f}'.format(3.141592657, -3.141592657)
+3.1416; -3.1416

Specificazione del sistema numerico

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(18)
'int: 18; hex: 12; oct: 22; bin: 10010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(18)
'int: 18; hex: 0x12; oct: 0o22; bin: 0b10010'

Separatore di migliaia

È possibile utilizzare "," come separatore di migliaia:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

Visualizzazione dei percentuali

>>> "progresso: {:.2%}".format(19.88/22)
'progresso: 90.36%'

In realtà, format supporta anche altri simboli di tipo:

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Altri trucchi

Incapsulamento dei segnaposto

A volte l'incapsulamento dei segnaposto è molto utile:

>>> '{0:{riempimento}{allineamento}16}'.format("hello", riempimento='*', allineamento='^')
'*****hello******'
>>>
>>> for num in range(5,12):
...  for base in "dXob":
...   print("{0:{larghezza}{base}}".format(num, base=base, larghezza=5), end=' ')
...  print()
...  
...
 5  5  5 101
 6  6  6 110
 7  7  7 111
 8  8 10 1000
 9  9 11 1001
 10  A 12 1010
 11  B 13 1011

Come funzione

È possibile non specificare i parametri di formattazione e chiamare la funzione in un punto non rilevante:

>>> email_f = "Il tuo indirizzo email è {email}".format
>>> print(email_f(email="[email protected]"))
Il tuo indirizzo email è [email protected]

Escape parentesi graffe

Quando è necessario utilizzare parentesi graffe all'interno di una stringa, è possibile usarle come escape character:

>>> " Il conjunto {} viene spesso rappresentato come {{0}} ".format("empty")
'Il conjunto vuoto viene spesso rappresentato come {0} '

Sommario

Questo è tutto il contenuto dell'articolo, speriamo che il contenuto di questo articolo possa essere di qualche aiuto per il vostro studio o lavoro. Se avete domande, potete lasciare un commento per discuterle, grazie per il supporto di Corso urla.

Dichiarazione: il contenuto di questo articolo è stato prelevato dalla rete, di proprietà dei rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti internet, questo sito non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume alcuna responsabilità legale correlata. Se si trova un contenuto sospetto di violazione del copyright, si prega di inviare una email a: notice#oldtoolbag.com (al momento dell'invio dell'email, sostituire # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la violazione, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare