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

 

Verwante artikelen