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.