Python f-strings
Op deze pagina:
Python f-strings zijn strings die tussen gekrulde haken Python uitdrukkingen bevatten die door Python vervangen worden door hun waarden.
Een Python f-string is een string waar de letter f voorgezet is. Dit mag een kleine letter f zijn, maar ook een hoofdletter F werkt.
Voorbeeld:
naam = 'Kees'
tekst = f'Hallo {naam}'
print(tekst)
# resultaat:
Hallo Kees
Als je vergeet om de string vooraf te laten gaan door een f, dan krijg je dit:
Hallo {naam}
Als je juist wel de naam van de variabele wil in plaats van de waarde, dan kun je dubbel gekrulde haken gebruiken:
naam = 'Kees'
tekst = f'Hallo {{naam}}'
print(tekst)
# resultaat:
Hallo {naam}
Je kunt ook meerdere Python uitdrukkingen in een string gebruiken:
boek = 'Leer Python terwijl je slaapt'
aantal_paginas = 735
tekst = f'Het boek "{boek}" bevat {aantal_paginas} bladzijden en leest makkelijk weg.'
print(tekst)
# resultaat:
Het boek "Leer Python terwijl je slaapt" bevat 735 bladzijden en leest makkelijk weg.
Tussen de gekrulde haken mag je geen commentaar gebruiken:
boek = 'Leer Python terwijl je slaapt'
aantal_paginas = 735
tekst = f'Het boek "{boek # goed boek}" bevat {aantal_paginas} bladzijden en leest makkelijk weg.'
print(tekst)
# foutmelding:
SyntaxError: f-string expression part cannot include '#'
Berekeningen gebruiken in een f-string
De uitdrukkingen tussen de gekrulde haken mogen ook berekeningen bevatten:
prijs = 200
btw_perc = 21
tekst = f'De prijs van dit artikel is: {(prijs + prijs * btw_perc/100):.2f}'
print(tekst)
# resultaat:
De prijs van dit artikel is: 242.00
De dubbele punt gevolgd door punt 2 f ( :.2f ) zorgt ervoor dat er 2 cijfers achter de komma komen.
Percentages weergeven in een f-string
Percentages kunnen gemakkelijk worden weergegeven in een f-string:
totaal = 5432
gedeelte = 657
percentage = gedeelte/totaal
print(percentage)
print(f'Het percentage is: {percentage:.2%}')
# resultaat:
0.1209499263622975
Het percentage is: 12.09%
Het percentageteken in de f-string zorgt voor vermenigvuldiging met 100 en het weergeven van het percentageteken, de punt 2 bepaalt het aantal cijfers achter de komma, in dit geval is dat 2.
F-strings uitlijnen en opvullen
Je kunt het aantal karakters dat een f-string moet bevatten meegeven, als de werkelijke tekst korter is, dan wordt de f-string verder opgevuld met spaties. De uitlijning bepaald dan waar die spaties komen. De uitlijning kun je aangeven met het groter dan teken '>' voor rechts uitlijnen, het kleiner dan teken '<' voor links uitlijnen en het dakje '^' voor centreren.
Voorbeelden:
woord = 'hallo'
print(f'*{woord:>11}*')
print(f'*{woord:<11}*')
print(f'*{woord:^11}*')
# resultaat:
* hallo*
*hallo *
* hallo *
Condities gebruiken in f-strings
In f-strings kun je ook met if-else condities werken. Let er hierbij op dat de f-strings worden ingevuld op het moment dat ze worden toegekend, niet op het moment dat ze worden geprint.
prijs = 100
tekst1 = 'met korting'
tekst2 = 'voordelig'
aanbieding = f'Dit is {tekst1 if prijs < 100 else tekst2}'
print(aanbieding)
prijs = 90
print(aanbieding)
print(f'Dit is {tekst1 if prijs < 100 else tekst2}')
# resultaat:
Dit is voordelig
Dit is voordelig
Dit is met korting
Zoals je hierboven ziet, de tweede regel die wordt geprint heeft niet de tekst die je verwacht omdat de f-string al werd bepaald op het moment dat deze werd toegekend aan de variabele aanbieding en de variable prijs werd pas na die toekenning aangepast.
Datum en tijd in f-strings
Datum en tijd kun je formatteren in f-strings zoals je dat ook kan in str.format:
import datetime
now = datetime.datetime.now()
print(f'{now:%Y-%m-%d %H:%M:%S}')
# resultaat
# (dit is natuurlijk afhankelijk van wanneer je dit doet):
2022-03-26 13:26:27
Voorloopnullen toevoegen in f-strings
Je kunt voorloopnullen toevoegen aan een getal in een f-string via de dubbele punt gevolgd door een nul en dan het aantal cijfers die je in totaal wil hebben.
getal = 538
print(f'10 cijfers: {getal:010}')
print(f'plus of min met teken vooraf: {getal:+010}')
getal = -538
# een negatief getal krijgt altijd een minteken
print(f'10 cijfers: {getal:010}')
print(f'plus of min met teken vooraf: {getal:+010}')
# resultaat:
10 cijfers: 0000000538
plus of min met teken vooraf: +000000538
10 cijfers: -000000538
plus of min met teken vooraf: -000000538
Meerdere regels in een f-string gebruiken
Met backslash n ('\n') kun je een nieuwe regel aangeven in een Python string. Een backslash mag je echter niet gebruiken in een uitdrukking tussen gekrulde haken in een f-string:
getal1 = 123
getal2 = 456
getal3 = 789
print(f'getal1 = {getal1\n}getal2 = {getal2\n}getal3 = {getal3\n}')
# resultaat:
SyntaxError: f-string expression part cannot include a backslash
Er zijn verschillende manieren om dit op te lossen.
Eerste oplossing: de backslash n buiten de gekrulde haken opnemen:
getal1 = 123
getal2 = 456
getal3 = 789
print(f'getal1 = {getal1}\ngetal2 = {getal2}\ngetal3 = {getal3}\n')
# resultaat:
getal1 = 123
getal2 = 456
getal3 = 789
Tweede oplossing: een docstring met drie aanhalingstekens gebruiken:
getal1 = 123
getal2 = 456
getal3 = 789
print(f'''getal1 = {getal1}
getal2 = {getal2}
getal3 = {getal3}
''')
# resultaat:
getal1 = 123
getal2 = 456
getal3 = 789
Derde oplossing: de backslash n opnemen in de variabelen:
getal1 = '123\n'
getal2 = '456\n'
getal3 = '789\n'
print(f'getal1 = {getal1}getal2 = {getal2}getal3 = {getal3}')
# resultaat:
getal1 = 123
getal2 = 456
getal3 = 789