string.templatelib — Supporto per le Template String¶
Questo modulo fornisce il supporto per le template string (t-string) come definito in PEP 750. Le template string vengono create usando il prefisso t e forniscono l’accesso sia alle parti letterali della stringa sia ai valori interpolati prima che vengano combinati.
Disponibilità: Le template string non sono supportate sulle OpenMV Cam basate su STM32. Sono disponibili solo sulle OpenMV Cam basate su Alif e i.MX RT.
Classi¶
- class string.templatelib.Template(*args)¶
Rappresenta una template string. Gli oggetti Template vengono tipicamente creati tramite la sintassi t-string (
t"...") ma possono anche essere costruiti direttamente usando il costruttore.- strings¶
Una tupla di letterali stringa che compaiono tra le interpolazioni.
- interpolations¶
Una tupla di oggetti
Interpolationche rappresentano le espressioni interpolate.
- values¶
Una proprietà di sola lettura che restituisce una tupla contenente l’attributo
valuedi ciascuna interpolazione nel template.
- __iter__() Iterator¶
Itera sul contenuto del template, restituendo le parti stringa e gli oggetti
Interpolationnell’ordine in cui compaiono. Le stringhe vuote vengono omesse.
- __add__(other: Template) Template¶
Concatena due template. Restituisce un nuovo
Templateche combina le stringhe e le interpolazioni di entrambi i template.La concatenazione di un template con uno
strè vietata per evitare ambiguità sul fatto che la stringa debba essere trattata come letterale o come interpolazione:t1 = t"Hello " t2 = t"World" result = t1 + t2 # Valid # TypeError: cannot concatenate str to Template result = t1 + "World"
- class string.templatelib.Interpolation(value: Any, expression: str = '', conversion: str | None = None, format_spec: str = '')¶
Rappresenta un’espressione interpolata all’interno di una template string. Tutti gli argomenti possono essere passati come argomenti keyword.
- value¶
Il valore valutato dell’espressione interpolata.
- expression¶
La rappresentazione in stringa dell’espressione così come appariva nella template string.
- conversion¶
Lo specificatore di conversione (
's'o'r') se presente, altrimentiNone. Nota che MicroPython non supporta la conversione'a'.
- format_spec¶
La stringa di specifica del formato se presente, altrimenti una stringa vuota.
Sintassi delle Template String¶
Le template string usano la stessa sintassi delle f-string ma con un prefisso t
name = "World"
template = t"Hello {name}!"
# Access template components
print(template.strings) # ('Hello ', '!')
print(template.values) # ('World',)
print(template.interpolations[0].expression) # 'name'
Specificatori di Conversione¶
Le template string memorizzano gli specificatori di conversione come metadati. A differenza delle f-string, la conversione non viene applicata automaticamente:
value = "test"
t = t"{value!r}"
# t.interpolations[0].value == "test" (not repr(value))
# t.interpolations[0].conversion == "r"
Il codice di elaborazione deve applicare esplicitamente le conversioni quando necessario.
Specifiche di Formato¶
Le specifiche di formato vengono memorizzate come metadati nell’oggetto Interpolation. A differenza delle f-string, la formattazione non viene applicata automaticamente:
pi = 3.14159
t = t"{pi:.2f}"
# t.interpolations[0].value == 3.14159 (not formatted)
# t.interpolations[0].format_spec == ".2f"
Secondo la PEP 750, il codice di elaborazione non è obbligato a usare le specifiche di formato, ma quando sono presenti dovrebbero essere rispettate e corrispondere al comportamento delle f-string ove possibile.
Formato di Debug¶
Il formato di debug {expr=} è supportato:
x = 42
t = t"{x=}"
# t.strings == ("x=", "")
# t.interpolations[0].expression == "x"
# t.interpolations[0].conversion == "r"
Importante
Secondo la PEP 750, a differenza delle f-string, le template string non applicano automaticamente conversioni o specifiche di formato. Questo è per scelta progettuale, per consentire al codice di elaborazione di controllare come queste vengono gestite. Il codice di elaborazione deve gestire esplicitamente questi attributi.
MicroPython non fornisce la funzione built-in format(). Usa invece i metodi di formattazione delle stringhe come str.format().
Esempio di Utilizzo¶
Elaborazione di base senza supporto del formato:
def simple_process(template):
"""Simple template processing"""
parts = []
for item in template:
if isinstance(item, str):
parts.append(item)
else:
parts.append(str(item.value))
return "".join(parts)
Elaborazione di un template con supporto del formato:
from string.templatelib import Template, Interpolation
def convert(value, conversion):
"""Apply conversion specifier to value"""
if conversion == "r":
return repr(value)
elif conversion == "s":
return str(value)
return value
def process_template(template):
"""Process template with conversion and format support"""
result = []
for part in template:
if isinstance(part, str):
result.append(part)
else: # Interpolation
value = convert(part.value, part.conversion)
if part.format_spec:
# Apply format specification using str.format
value = ("{:" + part.format_spec + "}").format(value)
else:
value = str(value)
result.append(value)
return "".join(result)
pi = 3.14159
name = "Alice"
t = t"{name!r}: {pi:.2f}"
print(process_template(t))
# Output: "'Alice': 3.14"
# Other format specifications work too
value = 42
print(process_template(t"{value:>10}")) # " 42"
print(process_template(t"{value:04d}")) # "0042"
Esempio di escaping HTML:
def html_escape(value):
"""Escape HTML special characters"""
if not isinstance(value, str):
value = str(value)
return value.replace("&", "&").replace("<", "<").replace(">", ">")
def safe_html(template):
"""Convert template to HTML-safe string"""
result = []
for part in template:
if isinstance(part, str):
result.append(part)
else:
result.append(html_escape(part.value))
return "".join(result)
user_input = "<script>alert('xss')</script>"
t = t"User said: {user_input}"
print(safe_html(t))
# Output: "User said: <script>alert('xss')</script>"
Vedi Anche¶
PEP 750 - Specifica delle Template String
Format string syntax - Sintassi delle stringhe di formato
Letterali stringa formattati - le f-string in Python