Python karakterlánc formátum ()

A string format () metódus az adott karakterláncot szebb kimenetre formázza a Pythonban.

A format()módszer szintaxisa :

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

Itt a p0, p1,… helyzeti argumentumok, és k0, k1,… kulcsszavak argumentumai v0, v1 vagy… értékekkel.

A sablon a formátumkódok és az argumentumok helyőrzőinek keveréke.

Karakterlánc formátum () Paraméterek

format()A módszer tetszőleges számú paramétert vesz fel. De kétféle paraméterre oszlik:

  • Pozíciós paraméterek - azoknak a paramétereknek a listája, amelyek a göndör zárójelben lévő paraméter indexével érhetők el(index)
  • Kulcsszóparaméterek - a kulcs = érték típusú paraméterek listája, amelyek a göndör zárójelben lévő paraméterkulccsal érhetők el(key)

Visszatérési érték a karakterlánc formátumából ()

A format()metódus visszaadja a formázott karakterláncot.

Hogyan működik a String formátum ()?

A format()beolvasott argumentumok típusát beolvassa és a karakterláncban meghatározott formátumkódoknak megfelelően formázza.

Helyzeti érvekhez

Pozíciós érvek

Itt az 0. érv egy "Adam" karakterlánc, az 1. érv pedig egy úszó szám: 230.2346.

Megjegyzés: Az argumentumlista 0-tól kezdődik a Pythonban.

A karakterlánc "Hello (0), your balance is (1:9.3f)"a sablon karakterlánc. Ez tartalmazza a formázás formátumkódjait.

A göndör zárójelek csak helyőrzők az elhelyezendő argumentumokhoz. A fenti példában a (0) az "Adam" helyőrzője, az (1: 9.3f) pedig a 230.2346 helyőrzője.

Mivel a sablon szöveg hivatkozik format()érveket (0)és (1)az érvek helyzeti érveket. Mindkettőjükre hivatkozhatunk számok nélkül is, ()és a Python belsőleg számokká alakítja át őket.

Belsőleg,

  • Mivel a „Adam” a 0 -én érv, ez kerül helyére (0). Mivel (0)nem tartalmaz más formátumkódokat, nem végez más műveleteket.
  • Azonban nem ez a helyzet, 1 st érv 230,2346. Itt a (1:9.3f)230.2346-ot helyezi el a helyén, és végrehajtja a 9.3f műveletet.
  • f megadja, hogy a formátum lebegő számmal foglalkozik. Ha nincs pontosan megadva, akkor hibát ad.
  • A "" előtti rész (9) meghatározza a szám (230.2346) minimális szélességét / kitöltését. Ebben az esetben a 230.2346-nak minimum 9 helyet osztanak ki, beleértve a "." -T.
    Ha nincs megadva igazítási lehetőség, akkor az a többi szóköztől jobbra lesz igazítva. (Karakterláncoknál balra van igazítva.)
  • A "" utáni rész (3) csonkolja a tizedes részt (2346) a megadott számig. Ebben az esetben 2346 csonkolódik 3 hely után.
    A fennmaradó számokat (46) a 235-ös kimenettel kerekítjük.

Kulcsszó-érvekhez

Kulcsszó-érvek

Ugyanezt a fenti példát használtuk a kulcsszó és a pozíció argumentumok közötti különbség bemutatására.

Itt a paraméterek helyett egy kulcsértéket használtunk a paraméterekhez. Nevezetesen: name = "Adam" és blc = 230.2346.

Mivel ezekre a paraméterekre a kulcsuk hivatkozik (név) és (blc: 9.3f), kulcsszó vagy elnevezett argumentumként ismerik őket.

Belsőleg,

  • A helyőrző (név) helyébe a név - "Adam" érték lép. Mivel nem tartalmaz más formátumkódokat, az "Adam" kerül elhelyezésre.
  • Az blc = 230.2346 argumentumnál a helyőrzőt (blc: 9.3f) a 230.2346 érték váltja fel. De mielőtt kicserélné, az előző példához hasonlóan 9.3f műveletet hajt végre rajta.
    Ennek eredményeként 230.235. A tizedes részt 3 hely után megcsonkítják, a fennmaradó számokat pedig lekerekítik. Hasonlóképpen a teljes szélesség 9-hez van rendelve, így két szóköz marad balra.

Alapformázás formátummal ()

A format()módszer lehetővé teszi egyszerű helyőrzők használatát a formázáshoz.

1. példa: Alapértelmezett formázás az alapértelmezett, pozíciós és kulcsszó argumentumokhoz

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

Kimenet

Üdvözlet Adam, az egyenleged 230.2346. Üdvözlet Adam, az egyenleged 230.2346. Üdvözlet Adam, az egyenleged 230.2346. Üdvözlet Adam, az egyenleged 230.2346.

Megjegyzés: Vegyes argumentumok esetén a kulcsszó argumentumoknak mindig a helyzeti argumentumokat kell követniük.

Számok formázása formátummal ()

A számokat az alább megadott formátummeghatározóval formázhatja:

Számformázási típusok
típus Jelentése
d Tizedes egész szám
c Megfelelő Unicode karakter
b Bináris formátum
o Oktál formátum
x Hexadecimális formátum (kisbetű)
x Hexadecimális formátum (nagybetű)
n Ugyanaz, mint a „d”. Kivéve, hogy a számelválasztóhoz az aktuális területi beállításokat használja
e Exponenciális jelölés. (e) kisbetű
E Exponenciális jelölés (E nagybetű)
f Megjeleníti a rögzített pont számát (Alapértelmezett: 6)
F Ugyanaz, mint az „f”. Kivéve az „inf” „INF” és a „nan” mint „NAN” kijelzéseket
g Általános formátum. A számot p számjegyre kerekíti. (Alapértelmezett pontosság: 6)
G Ugyanaz, mint a „g”. Kivéve az 'E' kapcsolót, ha a szám nagy.
% Százalék. Megszorozza 100-zal, és a% -ot teszi a végére.

2. példa: Egyszerű számformázás

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

Kimenet

 A szám: 123 A szám: 123.456790 bin: 1100, oct: 14, hex: c

3. példa: Számformázás párnázattal az int és az úszók számára

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

Kimenet

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

Itt,

  • az első utasításban (:5d)egész argumentumot vesz fel, és minimum 5 szélességet rendel hozzá. Mivel nincs beállítva igazítás, jobbra van igazítva.
  • A második utasításban láthatja, hogy a szélesség (2) kisebb, mint a szám (1234), tehát balra nem foglal helyet, de nem is csonkolja a számot.
  • Az egész számokkal ellentétben a lebegőnek van egész és tizedes része is. És a számhoz meghatározott minimális szélesség mindkét részre egészére vonatkozik, beleértve a "" -t is. .
  • A harmadik utasításban (:8.3f)a tizedes részt 3 helyre csonkolja, kerekítve az utolsó 2 számjegyet. És a most 12.235-es szám 8 szélességet vesz fel, 2 helyet hagyva balra.
  • Ha a fennmaradó helyeket nullával szeretné kitölteni, akkor a formátum-specifikáló előtt tegyen egy nullát. Egész számok és úszók esetén is működik: (:05d)és (:08.3f).

4. példa: Aláírt számok formázása

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

Kimenet

+12.230000 -12.230000 12.230000 -12.230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Szám formázás igazítással

Az operátorokat and =az igazításhoz használják, ha a számokhoz bizonyos szélességet rendelnek.

Szám formázás igazítással
típus Jelentése
< Balra igazítva a fennmaradó hellyel
^ Középre igazítva a fennmaradó helyhez
> Jobbra igazítva a fennmaradó hellyel
= Kényszeríti az aláírt (+) (-) bal szélső helyzetbe

5. példa: Szám formázása bal, jobb és közép igazítással

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

Kimenet

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

Megjegyzés: Az egész számok nullával töltött bal igazítása problémákat okozhat, mint a 3. példa, amely 12 helyett 12000-et ad vissza.

Karakterlánc formázás formátummal ()

Számként a karakterlánc hasonló módon formázható a 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)

Az objektumokat __str__()és a __repr__()funkciókat a gyorsírásos jelölésekkel is használhatja format().

Mint például __format__(), könnyen felülírhatja az objektumokat __str__()és a __repr_()módszereket.

12. példa: __str () __ és __repr () __ gyorsírás! R és! S a formátum () használatával

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

Kimenet

 Idézetek: 'macska', Idézetek nélkül: macska repr: REPR, str: STR 

érdekes cikkek...