Menu

f-stringi w Pythonie: formatowanie, wyrażenia i specyfikatory liczb

Praktyczny przewodnik po f-stringach w Pythonie: wstawianie zmiennych i wyrażeń, formatowanie liczb i dat oraz kiedy sięgnąć po starsze style formatowania.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Format, którego naprawdę będziesz używać

f-stringi to domyślny sposób, w jaki współczesny kod Pythona wstawia wartości do tekstu. Postaw f przed cudzysłowem otwierającym, a wszystko wewnątrz {...} stanie się żywym wyrażeniem:

Zwróć uwagę na trzy rzeczy. Prefiks f zamienia cały literał w szablon. Nawiasy klamrowe to miejsca podstawienia. A wyrażenie w nawiasach jest obliczane w chwili, gdy wykonuje się print, a nie wtedy, gdy napis powstał w kodzie.

f-stringi będziesz pisać dużo częściej niż jakikolwiek inny styl formatowania. Są krótsze niż "Hello, " + name + ".", czytelniejsze niż "Hello, %s." % name i bardziej elastyczne niż .format().

W środku może być wszystko, co daje wartość

Nawiasy klamrowe nie są ograniczone do nazw zmiennych. Nadaje się każde wyrażenie Pythona:

Wywołania metod, indeksowanie, arytmetyka, wyrażenia warunkowe: wszystko w porządku. Jedna zasada: to, co jest między nawiasami, ma być krótkie. Jeśli w miejscu podstawienia piszesz trzylinijkowe obliczenie, najpierw zapisz wynik w nazwanej zmiennej i wstaw tę nazwę.

Formatowanie liczb

Dwukropek po wyrażeniu otwiera specyfikację formatu (format spec), czyli minijęzyk określający, jak wartość ma być wyświetlona:

Krótki przewodnik po poszczególnych elementach:

  • .2f: float, dwie cyfry po kropce. Zaokrągla przy wyświetlaniu.
  • ,: przecinek jako separator tysięcy. Działa dla int i float.
  • .1%: mnoży przez 100 i dopisuje %. Świetne do proporcji i wskaźników.
  • .2e: notacja naukowa z dwiema cyframi po przecinku.

Możesz je łączyć. f"{total:,.2f}" daje "1,234.57".

Dopełnianie, szerokość i wyrównanie

Do wyrównywania kolumn wyjścia:

<10 oznacza "wyrównaj do początku i dopełnij do co najmniej 10 znaków". >5 oznacza "wyrównaj do końca i dopełnij do 5". Możesz też użyć ^, by wyśrodkować.

Aby dopełniać czymś innym niż spacje, postaw znak wypełnienia przed flagą wyrównania:

Formatowanie dat

Ta sama składnia {value:spec} działa dla obiektów datetime:

Specyfikacja po dwukropku to napis formatu strftime. Działa tu każdy kod % dostępny w strftime, a szczegółowo omawia je strona o datetime.

Sztuczka z = do debugowania

Jedna z najbardziej przydatnych mniej znanych funkcji: postaw = po wyrażeniu, a Python wypisze zarówno kod wyrażenia, jak i jego wartość:

Dostajesz count=7, price=19.99, count * price=139.93. To pełne print("count =", count) w trzech znakach. Warto o tym pamiętać, gdy następnym razem przy debugowaniu zechcesz wypisać kilka wartości.

Escapowanie nawiasów klamrowych

Jeśli potrzebujesz w wyjściu dosłownego { albo }, podwój go:

Pojedyncze nawiasy otwierają wyrażenie, a {{ i }} oznaczają w wyjściu { i }.

Wielolinijkowe f-stringi

f-stringi dobrze współpracują z potrójnymi cudzysłowami, co pomaga przy budowaniu małych szablonów bezpośrednio w kodzie:

Długi f-string możesz też podzielić na kilka sąsiednich literałów, a Python automatycznie je połączy:

Kiedy nadal spotyka się starsze style

W istniejącym kodzie trafisz na dwa starsze style formatowania:

Wszystkie trzy dają to samo wyjście. f-stringi wygrywają czytelnością w dziewięciu przypadkach na dziesięć. Po .format() sięgaj, gdy trzeba zbudować szablon raz i stosować go wiele razy, a % używaj tylko przy utrzymywaniu starszego kodu, który już z niego korzysta.

Do czego się nie nadają

W dwóch sytuacjach potrzebne jest inne narzędzie.

Budowanie zapytań SQL. Nigdy nie wstawiaj danych od użytkownika do napisu SQL przez f-string. Używaj zapytań parametryzowanych z biblioteki do bazy danych. f-string w tym miejscu to prosta droga do SQL injection.

Budowanie tłumaczonych tekstów interfejsu. Jeśli aplikacja obsługuje wiele języków, potrzebujesz szablonu, który wychwycą zewnętrzne narzędzia do tłumaczeń, zwykle _(...) z gettext albo pomocnika z frameworka. f-string zaszywa strukturę w kodzie źródłowym, co bardzo utrudnia tłumaczenie.

We wszystkich innych przypadkach (logi, wyjście w konsoli, budowanie adresów URL, składanie napisów konfiguracyjnych, formatowanie liczb do wyświetlenia) f-stringi to właściwa odpowiedź.

Dalej: liczby i wartości logiczne

f-stringi bardzo często formatują liczby, więc warto poznać typy liczbowe trochę głębiej. O tym jest następna strona.

Najczęściej zadawane pytania

Czym jest f-string w Pythonie?

f-string to literał napisu poprzedzony literą f, w którym wszystko wewnątrz {...} jest w czasie działania zastępowane wartością wyrażenia. f"Hello, {name}" wstawia do napisu bieżącą wartość name.

Od kiedy Python ma f-stringi?

Od Pythona 3.6. Obsługuje je każda współczesna wersja, więc możesz używać f-stringów wszędzie, gdzie dziś piszesz kod w Pythonie 3. Starsze style formatowania (% i .format()) nadal działają, ale w większości przypadków czyta się je gorzej.

Jak sformatować liczbę do 2 miejsc po przecinku w Pythonie?

Użyj specyfikacji formatu po dwukropku w nawiasach klamrowych: f"{price:.2f}". .2f oznacza 'float z dwiema cyframi po kropce dziesiętnej'. Zaokrągla wyświetlaną wartość, a oryginalna liczba się nie zmienia.

Czy w f-stringu można umieścić dowolne wyrażenie?

Tak: arytmetykę, wywołania metod, wywołania funkcji, wyrażenia warunkowe. Działa zarówno f"{name.upper()}", jak i f"{price * 1.2:.2f}". Trzymaj wyrażenia krótkie: jeśli kod w nawiasach robi się zawiły, najpierw oblicz go do zmiennej.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ