Format ciągu znaków w języku Python ()

Metoda string format () formatuje dany ciąg w ładniejszy wynik w Pythonie.

Składnia format()metody to:

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

Tutaj p0, p1,… to argumenty pozycyjne, a k0, k1,… to argumenty słów kluczowych o wartościach v0, v1,….

Szablon to połączenie kodów formatów z symbolami zastępczymi dla argumentów.

String format () Parametry

format()metoda przyjmuje dowolną liczbę parametrów. Ale dzieli się na dwa rodzaje parametrów:

  • Parametry pozycyjne - lista parametrów, do których można uzyskać dostęp za pomocą indeksu parametru w nawiasach klamrowych(index)
  • Parametry słowa kluczowego - lista parametrów typu klucz = wartość, do których można uzyskać dostęp za pomocą klucza parametru w nawiasach klamrowych(key)

Wartość zwracana z formatu ciągu ()

format()Metoda zwraca sformatowany ciąg.

Jak działa format String ()?

format()Odczytuje typ argumentów przekazanych do niego i formatuje je zgodnie z kodami określonymi w formacie ciągu.

Dla argumentów pozycyjnych

Argumenty pozycyjne

W tym przypadku argument 0 to ciąg „Adam”, a argument 1 to liczba zmiennoprzecinkowa 230,2346.

Uwaga: lista argumentów zaczyna się od 0 w Pythonie.

Ciąg "Hello (0), your balance is (1:9.3f)"jest łańcuchem szablonu. Zawiera kody formatów do formatowania.

Nawiasy klamrowe to tylko symbole zastępcze dla argumentów, które mają zostać umieszczone. W powyższym przykładzie (0) jest symbolem zastępczym dla „Adama”, a (1: 9.3f) jest symbolem zastępczym dla 230.2346.

Ponieważ łańcuch szablonu odwołuje się do format()argumentów jako (0)i (1), argumenty są argumentami pozycyjnymi. Do obu można się również odwoływać bez liczb, ()a Python wewnętrznie konwertuje je na liczby.

Wewnętrznie,

  • Ponieważ „Adam” jest zerowym argumentem, jest on umieszczony w miejscu (0). Ponieważ (0)nie zawiera żadnych innych kodów formatu, nie wykonuje żadnych innych operacji.
  • Jednak nie jest to w przypadku 1 st argumentu 230.2346. Tutaj (1:9.3f)umieszcza 230.2346 na swoim miejscu i wykonuje operację 9.3f.
  • f określa, że ​​format ma do czynienia z liczbą zmiennoprzecinkową. Jeśli nie zostanie poprawnie określony, wyświetli błąd.
  • Część przed „.” (9) określa minimalną szerokość / wypełnienie, jakie może przyjąć liczba (230.2346). W tym przypadku 230.2346 przydziela co najmniej 9 miejsc, w tym znak „.”.
    Jeśli nie określono opcji wyrównania, jest ona wyrównywana na prawo od pozostałych pomieszczeń. (W przypadku ciągów jest wyrównany do lewej).
  • Część po „.” (3) obcina część dziesiętną (2346) do podanej liczby. W tym przypadku liczba 2346 zostaje obcięta po 3 miejscach.
    Pozostałe liczby (46) są zaokrąglane do wyniku 235.

Dla argumentów słów kluczowych

Argumenty słów kluczowych

Użyliśmy tego samego przykładu z góry, aby pokazać różnicę między słowami kluczowymi a argumentami pozycyjnymi.

Tutaj zamiast samych parametrów użyliśmy pary klucz-wartość dla parametrów. Mianowicie name = „Adam” i blc = 230,2346.

Ponieważ do parametrów tych odwołuje się ich klucze, takie jak (nazwa) i (blc: 9.3f), są one znane jako słowa kluczowe lub nazwane argumenty.

Wewnętrznie,

  • Symbol zastępczy (nazwa) zostaje zastąpiony wartością imienia - „Adam”. Ponieważ nie zawiera żadnych innych kodów formatu, wstawiany jest „Adam”.
  • W przypadku argumentu blc = 230,2346 symbol zastępczy (blc: 9.3f) jest zastępowany wartością 230,2346. Ale przed wymianą, podobnie jak w poprzednim przykładzie, wykonuje na nim operację 9.3f.
    Wyprowadza 230.235. Część dziesiętna jest obcinana po 3 miejscach, a pozostałe cyfry są zaokrąglane. Podobnie, całkowitej szerokości przypisuje się 9, pozostawiając dwie spacje po lewej stronie.

Podstawowe formatowanie z formatem ()

format()Metoda pozwala na korzystanie z prostych elementów zastępczych do formatowania.

Przykład 1: Podstawowe formatowanie argumentów domyślnych, pozycyjnych i słów kluczowych

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

Wynik

Cześć Adam, Twoje saldo to 230,2346. Cześć Adam, Twoje saldo to 230,2346. Cześć Adam, Twoje saldo to 230,2346. Cześć Adam, Twoje saldo to 230,2346.

Uwaga: W przypadku argumentów mieszanych, argumenty słów kluczowych muszą zawsze następować po argumentach pozycyjnych.

Formatowanie liczb za pomocą formatu ()

Możesz formatować liczby za pomocą specyfikatora formatu podanego poniżej:

Typy formatowania liczb
Rodzaj Znaczenie
re Liczba całkowita dziesiętna
do Odpowiadający znak Unicode
b Format binarny
o Format ósemkowy
x Format szesnastkowy (małe litery)
X Format szesnastkowy (wielkie litery)
n To samo co „d”. Z wyjątkiem tego, że używa bieżących ustawień regionalnych dla separatora liczb
mi Notacja wykładnicza. (małe e)
mi Exponential notation (uppercase E)
f Displays fixed point number (Default: 6)
F Same as 'f'. Except displays 'inf' as 'INF' and 'nan' as 'NAN'
g General format. Rounds number to p significant digits. (Default precision: 6)
G Same as 'g'. Except switches to 'E' if the number is large.
% Percentage. Multiples by 100 and puts % at the end.

Example 2: Simple number formatting

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

Output

 The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c

Example 3: Number formatting with padding for int and 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))

Output

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

Here,

  • in the first statement, (:5d) takes an integer argument and assigns a minimum width of 5. Since, no alignment is specified, it is aligned to the right.
  • In the second statement, you can see the width (2) is less than the number (1234), so it doesn't take any space to the left but also doesn't truncate the number.
  • Unlike integers, floats has both integer and decimal parts. And, the mininum width defined to the number is for both parts as a whole including ".".
  • In the third statement, (:8.3f) truncates the decimal part into 3 places rounding off the last 2 digits. And, the number, now 12.235, takes a width of 8 as a whole leaving 2 places to the left.
  • If you want to fill the remaining places with zero, placing a zero before the format specifier does this. It works both for integers and floats: (:05d) and (:08.3f).

Example 4: Number formatting for signed numbers

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

Output

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

Formatowanie liczb z wyrównaniem

Operatory and =są używane do wyrównywania, gdy przypisano określoną szerokość liczbom.

Formatowanie liczb z wyrównaniem
Rodzaj Znaczenie
< Wyrównany do lewej do pozostałej przestrzeni
^ Środek wyrównany do pozostałej przestrzeni
> Wyrównany do prawej do pozostałej przestrzeni
= Wymusza przesunięcie znaku (+) (-) do skrajnego lewego położenia

Przykład 5: Formatowanie liczb z wyrównaniem do lewej, prawej i do środka

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

Wynik

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

Uwaga: wyrównanie do lewej wypełnione zerami dla liczb całkowitych może powodować problemy, ponieważ trzeci przykład zwraca 12000 zamiast 12.

Formatowanie ciągów za pomocą format ()

Jako liczby ciąg można sformatować w podobny sposób za pomocą 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)

Możesz także używać obiektów __str__()i __repr__()funkcji z zapisami skrótowymi używając format().

Na przykład __format__()możesz łatwo przesłonić obiekty __str__()i __repr_()metody.

Przykład 12: __str () __ and __repr () __ shorthand! R and! S używając 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()))

Wynik

 Cytaty: „cat”, bez cudzysłowów: cat repr: REPR, str: STR 

Interesujące artykuły...