Nauč se Python > Materiály > Začátečnický kurz > Funkce & Řetězce > Šablony (formátovací řetězce)

Šablony (formátovací řetězce)

Řekněme, že chceš uživateli vypsat určitou hodnotu s nějakou „omáčkou“ okolo. Dá se na to použít print(), kterému můžeš předat „mix“ řetězců a čísel:

>>> soucet = 3 + 4
>>> print('Součet je', soucet)

Co ale když chceš celý tento výpis uložit do proměnné – jako jeden řetězec? Čárka tu fungovat nebude, ta odděluje argumenty ve volání funkce. Je potřeba soucet převést na řetězec a ten pak připojit k „omáčce“:

>>> hlaska = 'Součet je ' + str(soucet)

To ale není tak přehledné, jak by mohlo. Lze to zpřehlednit použitím šablony.

Takovou šablonu si představ jako formulář s vynechanými místy:

Součet je __________.

Složitější šablona by byla třeba tahle:

Mil[ý/á] _______,
Váš výsledek je __________.

S pozdravem,
_________

Aby Python věděl, do kterého vynechaného místa co doplnit, je potřeba jednotlivá vynechaná místa ve formuláři nějak jednoznačně označit. Použijme jména v „kudrnatých“ závorkách:

Součet je {soucet}.
Mil{y_a} {osloveni},
Váš výsledek je {soucet}.

S pozdravem,
{podpis}.

Takovou šablonu můžeš použít jako formátovací řetězec (angl. formatted string literal, zkráceně f-string). Jako jakýkoli jiný řetězec ji vlož do uvozovek. A aby bylo jasné, že jde o šablonu, před první uvozovky přidej navíc značku f.

f"Součet je {soucet}."

Takový formátovací řetězec jde použít v Pythonu – jako jakýkoli jiný řetězec:

soucet = 3 + 4
hlaska = f'Součet je {soucet}'
print(hlaska)
y_a = 'á'
osloveni = 'Anežko'
soucet = 3 + 4
podpis = 'Váš Program'

print(f"""
Mil{y_a} {osloveni},
Váš výsledek je {soucet}.

S pozdravem,
{podpis}
""")

A nakonec – v šabloně můžeš použít nejen jména proměnných, ale jakékoli výrazy.

>>> hlaska = f'Součet je {3 + 4}'

Ale nepřežeň to! Většinou je program přehlednější, když si každou vypisovanou hodnotu zvlášť pojmenuješ – tedy uložíš do vhodně pojmenované proměnné.

Metoda format

Někdy se stane, že jednu šablonu potřebuješ použít vícekrát. Pak formátovací řetězec použít nemůžeš, protože se do něj proměnné doplňují automaticky a hned. V takovém případě můžeš šablonu napsat do normálního řetězce (bez f na začátku) a použít metodu format:

sablona = 'Ahoj {jmeno}! Tvoje číslo {cislo}.'
print(sablona.format(cislo=7, jmeno='Anežko'))
print(sablona.format(cislo=42, jmeno='Elvíro'))
print(sablona.format(cislo=3, jmeno='Viléme'))

Oproti formátovacím řetězcům umí format užitečnou zkratku: nepojmenované argumenty dosadí postupně do nepojmenovaných míst v šabloně:

vypis = '{} krát {} je {}'.format(3, 4, 3 * 4)
print(vypis)

Výrazy jako f'Součet je {3 + 4}' ale format dosadit neumí. Složitější dosazované hodnoty si proto vždycky pojmenuj.