Python String Formatting

(Sponsorer) Kom igång med att lära dig Python med DataCamps kostnadsfria introduktion till Python. Lär dig datavetenskap genom att genomföra interaktiva kodningsutmaningar och titta på videor av expertinstruktörer. Börja nu!

Uppdaterad jan 07, 2020

Med format()-metoden kan du formatera strängar på vilket sätt som helst.

Syntax: template.format(p1, p1, .... , k1=v1, k2=v2)

Mallen är en sträng som innehåller formatkoder, format()-metoden använder sitt argument för att ersätta värdet för varje formatkod. Till exempel:

>>> 'Sam has {0} red balls and {1} yellow balls'.format(12, 31)

{0} och {1} är formatkoder. Formatkoden {0} ersätts med det första argumentet i format(), dvs. 12, medan {1} ersätts med det andra argumentet i format(), dvs. 31.

Förväntat utdata:

Sam has 12 red balls and 31 yellow balls

Den här tekniken är okej för enkel formatering, men vad händer om du vill ange precisionen för flyttal? För en sådan sak måste du lära dig mer om formatkoder. Här är den fullständiga syntaxen för formatkoder.

Syntax: {:}

type kan användas med formatkoder:

Formatkoder Beskrivning
d för heltal
f för flyttal
b för binära tal
o för oktala tal
x för oktala hexadecimala tal
s för strängar
e för flyttal i exponentformat

Följande exempel kommer att göra saker och ting tydligare.

Exempel 1:

>>> "Floating point {0:.2f}".format(345.7916732)

Här anger vi 2 siffror för precision och f används för att representera flyttal.

Förväntat resultat:

Floating point 345.79

Exempel 2:

12
>>> import math>>> "Floating point {0:10.3f}".format(math.pi)

Här anger vi 3 siffror för precision, 10 för bredd och f för flyttal.

Förväntat resultat:

Floating point 3.142

Exempel 3:

"Floating point pi = {0:.3f}, with {1:d} digit precision".format(math.pi, 3)

Här representerar d i {1:d} heltalsvärde.

Förväntat resultat:

Floating point pi = 3.142, with 3 digit precision

Du behöver bara ange precision när det gäller flyttal om du anger precision för heltal ValueError kommer att uppstå.

Exempel 5:

'Sam has {1:d} red balls and {0:d} yellow balls'.format(12, 31)

förväntat resultat:

Sam has 31 red balls and 12 yellow balls

Exempel 6:

"In binary 4 is {0:b}".format(4) # b for binary, refer to Fig 1.1

förväntat resultat:

In binary 4 is 100

Exempel 7:

12
array = "A = {0}, B = {1}, C = {2}".format(*array)

Förväntat utfall:

A = 34, B = 66, C = 12

Exempel 8:

123456
d = {'hats' : 122,'mats' : 42}"Sam had {hats} hats and {mats} mats".format(**d)

förväntat resultat:

Sam had 122 hats and 42 mats

Metoden format() har också stöd för nyckelord som argument.

'Sam has {red} red balls and {green} yellow balls'.format(red = 12, green = 31)

Note while using keyword arguments we need to use arguments inside {} not numeric index.

Du kan också blanda positionsargument med nyckelordsargument

12
'Sam has {red} red balls, {green} yellow balls \and {0} bats'.format(3, red = 12, green = 31)

Metoden format() för att formatera strängar är ganska ny och introducerades i Python 2.6 . Det finns en annan gammal teknik som du kan se i äldre koder som gör att du kan formatera strängar med hjälp av % operatorn istället för format() metoden.

Låt oss ta ett exempel.

"%d pens cost = %.2f" % (12, 150.87612)

Här använder vi mallsträngar till vänster om %. I stället för {} för formatkoder använder vi %. Till höger om % använder vi tupel för att innehålla våra värden. %d och %.2f kallas formatspecifikationer och börjar med % följt av ett tecken som representerar datatypen. Exempelvis är %d formatspecifikator en platshållare för ett heltal, på samma sätt är %.2f en platshållare för ett flyttal.

%d ersätts med det första värdet i tupeln, dvs. 12, och %.2f ersätts med det andra värdet, dvs. 150.87612.

Förväntat utdata:

12 pens cost = 150.88

Somliga fler exempel.

Exempel 1:

Nytt:

"{0:d} {1:d} ".format(12, 31)

Gammalt:

"%d %d" % (12, 31)

förväntat utfall:

12 31

Exempel 2:

Nytt:

"{0:.2f} {1:.3f}".format(12.3152, 89.65431)

Gammal:

"%.2f %.3f" % (12.3152, 89.65431)

Vänligt resultat:

12.32 89.654

Exempel 3:

Nytt:

"{0:s} {1:o} {2:.2f} {3:d}".format("Hello", 71, 45836.12589, 45 )

Gammalt:

Lämna ett svar

Din e-postadress kommer inte publiceras.