Python-strengformat ()

Strengformatmetoden () formaterer den givne streng til en pænere output i Python.

Metodens syntaks format()er:

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

Her er p0, p1, … positionelle argumenter, og k0, k1, … er nøgleordargumenter med henholdsvis værdierne v0, v1, …

Og skabelon er en blanding af formatkoder med pladsholdere til argumenterne.

Strengformat () Parametre

format()metode tager et vilkårligt antal parametre. Men er opdelt i to typer parametre:

  • Positionsparametre - liste over parametre, der kan tilgås med parameterindeks inde i krøllede seler(index)
  • Nøgleordsparametre - liste over parametre af typen nøgle = værdi, der kan tilgås med parameternøgle inde i krøllede parenteser(key)

Returneringsværdi fra strengformat ()

Den format()metode returnerer den formateret streng.

Hvordan fungerer strengformat ()?

De format()læser den type argumenter, der sendes til den, og formaterer den i henhold til de formatkoder, der er defineret i strengen.

For positionelle argumenter

Positionelle argumenter

Her er Argument 0 en streng "Adam" og Argument 1 er et flydende tal 230.2346.

Bemærk: Argumentlisten starter fra 0 i Python.

Strengen "Hello (0), your balance is (1:9.3f)"er skabelonstrengen. Dette indeholder formatkoder til formatering.

De krøllede seler er kun pladsholdere for argumenterne, der skal placeres. I ovenstående eksempel er (0) pladsholder for "Adam" og (1: 9.3f) er pladsholder for 230.2346.

Da skabelonstrengen henviser til format()argumenter som (0)og (1), er argumenterne positionelle argumenter. Begge kan der også henvises til uden tallene, ()og Python konverterer dem internt til tal internt.

Internt,

  • Eftersom "Adam" er den 0 th argument, placeres den i stedet for (0). Da (0)den ikke indeholder andre formatkoder, udfører den ikke andre handlinger.
  • Det er dog ikke tilfældet for en st argument 230,2346. Her (1:9.3f)placerer 230.2346 i stedet for og udfører operationen 9.3f.
  • f angiver, at formatet vedrører et float-nummer. Hvis det ikke er angivet korrekt, vil det give en fejl.
  • Delen før "." (9) angiver den mindste bredde / polstring, som nummeret (230.2346) kan tage. I dette tilfælde tildeles 230.2346 mindst 9 steder inklusive ".".
    Hvis der ikke er angivet nogen justeringsmulighed, justeres den til højre for de resterende mellemrum. (For strenge er det justeret til venstre.)
  • Delen efter "." (3) afkorter decimaldelen (2346) op til det givne tal. I dette tilfælde afkortes 2346 efter 3 steder.
    De resterende tal (46) afrundes med output 235.

For søgeordsargumenter

Søgeordsargumenter

Vi har brugt det samme eksempel ovenfra for at vise forskellen mellem søgeords- og positionelle argumenter.

Her i stedet for kun parametrene har vi brugt en nøgleværdi til parametrene. Navnligt navn = "Adam" og blc = 230.2346.

Da disse parametre henvises til af deres nøgler som (navn) og (blc: 9.3f), er de kendt som nøgleord eller navngivne argumenter.

Internt,

  • Pladsholderen (navn) erstattes af værdien af ​​navnet - "Adam". Da den ikke indeholder andre formatkoder, placeres "Adam".
  • For argumentet blc = 230.2346 erstattes pladsholderen (blc: 9.3f) med værdien 230.2346. Men inden den udskiftes, som det foregående eksempel, udfører den 9.3f-operation på den.
    Dette output 230.235. Den decimale del afkortes efter 3 steder, og de resterende cifre afrundes. Ligeledes tildeles den samlede bredde 9 og efterlader to mellemrum til venstre.

Grundlæggende formatering med format ()

Den format()fremgangsmåde tillader anvendelsen af simple pladsholdere til formatering.

Eksempel 1: Grundlæggende formatering til standard-, positions- og søgeordsargumenter

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

Produktion

Hej Adam, din saldo er 230.2346. Hej Adam, din saldo er 230.2346. Hej Adam, din saldo er 230.2346. Hej Adam, din saldo er 230.2346.

Bemærk: I tilfælde af blandede argumenter skal søgeordsargumenter altid følge positionelle argumenter.

Tal formateret med format ()

Du kan formatere numre ved hjælp af nedenstående formatspecifikator:

Antal formateringstyper
Type Betyder
d Decimal heltal
c Tilsvarende Unicode-karakter
b Binært format
o Oktalformat
x Hexadecimal format (små bogstaver)
x Hexadecimal format (store bogstaver)
n Samme som 'd'. Bortset fra at den bruger den aktuelle lokalitetsindstilling til nummeradskiller
e Eksponentiel notation. (små bogstaver e)
E Eksponentiel notation (store bogstaver E)
f Viser fast punkt nummer (standard: 6)
F Samme som 'f'. Undtagen viser 'inf' som 'INF' og 'nan' som 'NAN'
g Generelt format. Afrunder nummer til p betydende cifre. (Standardpræcision: 6)
G Samme som 'g'. Undtagen skifter til 'E', hvis antallet er stort.
% Procent. Multipler med 100 og sætter% i slutningen.

Eksempel 2: Enkel nummerformatering

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

Produktion

 Nummeret er: 123 Nummeret er: 123.456790 bin: 1100, okt: 14, hex: c

Eksempel 3: Talformatering med polstring til 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))

Produktion

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 sætning (:5d)tager et heltalargument og tildeler en mindste bredde på 5. Da der ikke er angivet nogen justering, er den justeret til højre.
  • I det andet udsagn kan du se, at bredden (2) er mindre end tallet (1234), så det tager ikke plads til venstre, men afkorter heller ikke antallet.
  • I modsætning til heltal har floats både heltal og decimaldele. Og mininumbredden, der er defineret til nummeret, gælder for begge dele som helhed inklusive "." .
  • I den tredje sætning (:8.3f)afkortes decimaldelen til 3 steder, der afrunder de sidste 2 cifre. Og tallet, nu 12.235, tager en bredde på 8 som helhed og efterlader 2 steder til venstre.
  • Hvis du vil udfylde de resterende steder med nul, skal du placere et nul inden formatspecifikatoren. Det fungerer både for heltal og flyder: (:05d)og (:08.3f).

Eksempel 4: Talformatering for underskrevne 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))

Produktion

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

Talformatering med justering

Operatørerne and =bruges til justering, når tallene tildeles en bestemt bredde.

Talformatering med justering
Type Betyder
< Venstrejusteret til den resterende plads
^ Centerjusteret til den resterende plads
> Højrejusteret til den resterende plads
= Tvinger den underskrevne (+) (-) til positionen længst til venstre

Eksempel 5: Talformatering med venstre, højre og centerjustering

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

Produktion

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

Bemærk: Venstrejustering fyldt med nuller for heltal kan forårsage problemer som det 3. eksempel, der returnerer 12000 snarere end 12.

Strengformatering med format ()

Som tal kan streng formateres på en lignende måde 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å bruge objekt __str__()og __repr__()funktionalitet med stenografiske notationer ved hjælp af format().

Ligesom __format__()kan du nemt tilsidesætte objekter __str__()og __repr_()metoder.

Eksempel 12: __str () __ og __repr () __ stenografi! R og! S ved hjælp af 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()))

Produktion

 Citater: 'cat', Uden citater: cat repr: REPR, str: STR 

Interessante artikler...