Upiększanie ciągów znaków, czyli jak formatować stringi w Pythonie

W pythonie istniały dwie metody formatowania stringów. Sytuacja ta trwała do czasu pojawienia się Python 3.6, wraz z nadejściem f-stringów. Dziś postaram się omówić wszystkie metody formatowania, oraz podam przykład ich stosowania.

Kod z którym będziemy pracować

Wykorzystamy pare prostych zmiennych, które postaram się wyświetlić za pomocą każdej z dostępnych metod formatujących.

first_name = "John"
last_name = "Doe"
born_year = 1978
current_age = 40
dict = {'text':'One', 'value': 1}

Stare formatowanie poprzez znak ‘%’

Formatowanie to znajduje się w Pythonie od dawien dawna. Obecnie metoda ta nie jest zalecana przez dokumentację Pythona, gdyż posiada pewne niedociągłości i może powodować problemy z wyświetlaniem krotek oraz list. Poniżej przedstawiam przykład użycia tego formatowania:

print("Hello %s %s. Your born year is %d. You are %d years old", first_name, last_name, born_year, current_age)

Co oznacza %s? To porostu informuje interpreter o tym, że chcemy odczytać string. Dostępne modyfikatory:

  • %s - Ciąg znaków (bądź każdy obiekt który posiada metodę repr np. tablica))
  • %d - Liczby całkowite
  • %f - Liczby zmiennoprzecinkowe
  • %.(X) - Liczba zmiennoprzecinkowa z dokładnością do X liczb po przecinku
  • %X - Liczba całkowita reprezentowana w zapisie hexadecymalnym (szesnastkowym)

Formatowanie poprzez str.format()

Ta opcja została wprowadzona w Python 2.6. Jest to ulepszone formatowanie względem %-formatowania. Dzięki str.format() pola które zamierzamy podstawić reprezentujemy za pomocą znaków {}. Przykład:

print("Hello {2} {3}. Your born year is {1}. You are {0} years old.".format(current_age, born_year, first_name, last_name))

Możemy też wyświetlać zawartość słowników poprzez ich rozpakowywanie:

print("{text} is {value}.".format(**dict))

Nowa droga, czyli f-Stringi w Pythonie 3.6

Wprowadzenie f-Stringów uczyniło formatowanie jeszcze prostrzym. Przykład:

print(f"Hello {first_name} {last_name}. Your born year is {born_year}. You are {current_year} years old")

To wszystko, f-Stringi są wykonywane w czasie uruchomienia. Poprostu w {} podajesz zmienną zdefiniowaną wcześniej. Możesz też używać wyrażeń, np.:

print(f"{2 * 6}")

Ten kod wyświetli wartość wyrażenia 2 * 6, czyli 12. Możesz też wywoływać funkcje:

name = "jane"
print(f"{name.capitalize()}")

Powyższy kod wyświetli napis: Jane. Możemy też wyświetlać zawartość słowników:

print(f"{dict['text']} is {dict['value']}.")

Jak widać warto korzystać z f-Stringów, gdyż zwiększają naszą produktywność oraz nie zaciemniają kodu. Również są też nieco szybsze w wykonaniu niż %-Stringi oraz str.format().

comments powered by Disqus