Sytuacja kobiet w IT w 2024 roku
6.06.20182 min
Mike Driscoll

Mike Driscollprogramista, blogerhttps://www.blog.pythonlibrary.org/

Python 3: Poznaj f-strings

O nowym, łatwiejszym sposobie interpolacji stringów – f-strings.

Python 3: Poznaj f-strings

W Pythonie 3.6 dodano nowy, łatwiejszy sposób interpolacji stringów - f-strings (PEP 498). Aby stworzyć f-string, wystarczy poprzedzić string literą „f”. Sam string można sformatować niemal tak samo, jak w przypadku metody str.format(). Możemy uzyskać więc w stringu pola, które zastąpimy - ujęte nawiasami klamrowymi. To prosty przykład:

>>> name = 'Mike'
>>> f"Hello {name}"
'Hello Mike'


W dokumentacji Pythona znalazłem zabawny przykład, który demonstruje jak możemy wkomponować pola zastępcze. Trochę go uprościłem:

>>> total = 45.758
>>> width = 14
>>> precision = 4
>>> f"Your total is {total:{width}.{precision}}"
'Your total is          45.76'


Tworzymy tu trzy zmienne
. Pierwsza to liczba rzeczywista, a pozostałe dwie są liczbami całkowitymi. Następnie tworzymy nasz f-string, w którym chcemy umieścić zmienną total. Ale, jak można zauważyć, w polu zastępczym stringa umieściliśmy zmienne width i precision, by sformatować samą sumę. W tym przypadku piszemy, że width (szerokość) pola sumy ma wynosić 14 znaków, a precision (dokładność) liczby rzeczywistej określamy jako 4. Wynik, jaki otrzymujemy to 45.76 – jak widać, jest zaokrąglony.

F-string jest pomocny również przy formatowaniu dat:

>>> import datetime
>>> today = datetime.datetime.today()
>>> f"{today:%B %d, %Y}"
'March 13, 2018'


Osobiście podoba mi się przykład podany w PEP 498 - pokazuje jak przy formatowaniu daty możemy wyodrębnić z niej dzień tygodnia:

>>> from datetime import datetime
>>> date = datetime(1992, 7, 4)
>>> f'{date} was on a {date:%A}'
'1992-07-04 00:00:00 was on a Saturday'


Tej samej zmiennej
możemy użyć w naszym f-stringu wielokrotnie:

>>> spam = 'SPAM'
>>> f"Lovely {spam}! Wonderful {spam}!"
'Lovely SPAM! Wonderful SPAM!'


Dokumentacja radzi, by zachować ostrożność, gdy zagnieżdżamy w f-stringu cudzysłowy. Z pewnością nie możemy zrobić czegoś takiego:

>>> value = 123
>>> f"Your value is "{value}""


To błąd składniowy - taki sam jak w przypadku zwykłych ciągów znaków. Nie można również wstawić ukośnika wstecznego bezpośrednio w formatowanym stringu.

>>> f"newline: {ord('\n')}"
Traceback (most recent call last):
  Python Shell, prompt 29, line 1
Syntax Error: f-string expression part cannot include a backslash: <string>, line 1, pos 0


W dokumentacji jest jednak wzmianka o tym, że można to obejść w ten sposób:

>>> newline = ord('\n')
>>> f"newline: {newline}"
'newline: 10'


W tym przypadku zamieniamy znak nowej linii na jego wartość porzadkową.

Ostatni punkt w dokumentacji mówi o tym, że nie możemy używać f-stringa jako docstringa (notki dokumentacyjnej). Według Nicka Coghlana wynika to z tego, że docstringi muszą być znane podczas kompilacji, a f-stringi ustalane są dopiero w czasie życia programu.

Podsumowanie

Powyższe informacje powinny wystarczyć, jeśli chcesz wykorzystać f-strings w swoim własnym kodzie. To fajny dodatek do Pythona, który - jak zdążyłem zauważyć - w niektórych przypadkach ułatwia interpolację stringów. Powodzenia. Koduj na zdrowie!

Dodatkowa lektura

Więcej o f-strings: https://bit.ly/2Jzmvuo

<p>Loading...</p>