Python-strengformat ()

Strengformatmetoden () formaterer den gitte strengen til en bedre utgang i Python.

Syntaksen til format()metoden er:

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

Her er p0, p1, … posisjonsargumenter, og k0, k1, … er søkeordargumenter med henholdsvis verdiene v0, v1,….

Og mal er en blanding av formatkoder med plassholdere for argumentene.

Strengformat () Parametere

format()metoden tar et hvilket som helst antall parametere. Men er delt inn i to typer parametere:

  • Posisjonsparametere - liste over parametere som kan nås med parameterindeks i krøllete bukseseler(index)
  • Nøkkelordsparametere - liste over parametere av typen nøkkel = verdi, som kan nås med parameternøkkel i krøllete parenteser(key)

Returverdi fra strengformat ()

Den format()metoden returnerer den formaterte strengen.

Hvordan fungerer strengformat ()?

Den format()leser typen argumenter som sendes til den og formaterer den i henhold til formatkodene som er definert i strengen.

For posisjonsargumenter

Posisjonelle argumenter

Her er Argument 0 en streng "Adam" og Argument 1 er et flytende tall 230.2346.

Merk: Argumentlisten starter fra 0 i Python.

Strengen "Hello (0), your balance is (1:9.3f)"er malstrengen. Dette inneholder formatkodene for formatering.

De krøllete selene er bare plassholdere for argumentene som skal plasseres. I eksemplet ovenfor er (0) plassholder for "Adam" og (1: 9.3f) er plassholder for 230.2346.

Siden malstrengen refererer til format()argumenter som (0)og (1), er argumentene posisjonsargumenter. De kan begge refereres uten tallene, ()og Python konverterer dem internt til tall.

Internt,

  • Siden "Adam" er 0 th argument, legges den i stedet for (0). Siden (0)den ikke inneholder andre formatkoder, utfører den ingen andre operasjoner.
  • Det er imidlertid ikke tilfelle for en st argument 230,2346. Her (1:9.3f)plasserer 230.2346 på plass og utfører operasjonen 9.3f.
  • f angir at formatet handler om et flottall. Hvis ikke riktig spesifisert, vil det gi en feil.
  • Delen før "." (9) angir minimum bredde / polstring som nummeret (230.2346) kan ta. I dette tilfellet tildeles 230.2346 minimum 9 steder inkludert ".".
    Hvis det ikke er spesifisert noe justeringsalternativ, justeres det til høyre for de gjenværende plassene. (For strenger er den justert mot venstre.)
  • Delen etter "." (3) avkorter desimaldelen (2346) opp til det gitte tallet. I dette tilfellet avkortes 2346 etter 3 plasser.
    Gjenværende tall (46) avrundes med 235.

For søkeordargumenter

Søkeordargumenter

Vi har brukt det samme eksemplet ovenfra for å vise forskjellen mellom søkeord og posisjonsargumenter.

Her, i stedet for bare parametrene, har vi brukt en nøkkelverdi for parametrene. Nemlig navn = "Adam" og blc = 230.2346.

Siden disse parametrene er referert til av nøklene som (navn) og (blc: 9.3f), er de kjent som nøkkelord eller navngitte argumenter.

Internt,

  • Plassholderen (navnet) erstattes av verdien av navnet - "Adam". Siden den ikke inneholder andre formatkoder, plasseres "Adam".
  • For argumentet blc = 230.2346 erstattes plassholderen (blc: 9.3f) med verdien 230.2346. Men før den erstattes, som forrige eksempel, utfører den 9.3f-operasjon på den.
    Dette gir 230.235. Desimaldelen blir avkortet etter 3 plasser, og de resterende sifrene blir avrundet. På samme måte er den totale bredden tildelt 9 og etterlater to mellomrom til venstre.

Grunnleggende formatering med format ()

Den format()metoden tillater bruk av enkle plassholdere for formatering.

Eksempel 1: Grunnleggende formatering for standard-, posisjons- og søkeordargumenter

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

Produksjon

Hei Adam, saldoen din er 230.2346. Hei Adam, saldoen din er 230.2346. Hei Adam, saldoen din er 230.2346. Hei Adam, saldoen din er 230.2346.

Merk: I tilfelle blandede argumenter, må søkeordargumenter alltid følge posisjonsargumenter.

Tall formateres med format ()

Du kan formatere tall ved hjelp av formatspesifikatoren gitt nedenfor:

Tallformateringstyper
Type Betydning
d Desimaltall
c Tilsvarende Unicode-karakter
b Binært format
o Oktalformat
x Heksadesimalt format (små bokstaver)
X Heksadesimalt format (store bokstaver)
n Samme som 'd'. Med unntak av at den bruker gjeldende språkinnstilling for tallskiller
e Eksponensiell notasjon. (små bokstaver e)
E Eksponensiell notasjon (store bokstaver E)
f Viser fast punktnummer (standard: 6)
F Samme som 'f'. Unntatt viser 'inf' som 'INF' og 'nan' som 'NAN'
g Generelt format. Avrunder nummer til p betydende sifre. (Standard presisjon: 6)
G Samme som 'g'. Unntatt bytter til 'E' hvis tallet er stort.
% Prosentdel. Multipler med 100 og setter% på slutten.

Eksempel 2: Enkel tallformatering

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

Produksjon

 Tallet er: 123 Nummeret er: 123.456790 søppelbøtte: 1100, okt: 14, heks: c

Eksempel 3: Tallformatering med polstring for int og 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))

Produksjon

1 2 1 2 3 4 1 2. 2 3 5 0 0 0 1 2 0 0 1 2. 2 3 5

Her,

  • i den første setningen, (:5d)tar et heltallargument og tildeler en minimumsbredde på 5. Siden ingen justering er spesifisert, er den justert til høyre.
  • I den andre setningen kan du se at bredden (2) er mindre enn tallet (1234), så det tar ikke noe plass til venstre, men avkorter heller ikke tallet.
  • I motsetning til heltall, har flyter både heltall og desimaldeler. Og mininumbredden definert til tallet er for begge deler som en helhet inkludert "." .
  • I den tredje setningen, (:8.3f)avkortes desimaldelen til 3 steder som avrunder de to siste sifrene. Og tallet, nå 12.235, tar en bredde på 8 som helhet og etterlater to steder til venstre.
  • Hvis du vil fylle de gjenværende stedene med null, plasserer du en null før formatspesifikatoren gjør dette. Det fungerer både for heltall og flyter: (:05d)og (:08.3f).

Eksempel 4: Tallformatering for signerte numre

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

Produksjon

+12,230000 -12,230000 12,230000 -12,230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Tallformatering med justering

Operatørene and =brukes til justering når de tildeles en viss bredde til tallene.

Tallformatering med justering
Type Betydning
< Venstrejustert til gjenværende plass
^ Senterjustert til gjenværende plass
> Høyrejustert til gjenværende plass
= Tvinger den signerte (+) (-) til lengst til venstre

Eksempel 5: Tallformatering med venstre, høyre og midtjustering

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

Produksjon

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

Merk: Venstrejustering fylt med nuller for heltall kan forårsake problemer som det tredje eksemplet som returnerer 12000, i stedet for 12.

Strengformatering med format ()

Som tall kan streng formateres på en lignende måte med 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)

Du kan også bruke objekter __str__()og __repr__()funksjonalitet med forkortelser med format().

På samme måte __format__()kan du enkelt overstyre objekt __str__()og __repr_()metoder.

Eksempel 12: __str () __ og __repr () __ stenografi! R og! S ved bruk av 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()))

Produksjon

 Sitater: 'cat', Without Quotes: cat repr: REPR, str: STR 

Interessante artikler...