string.templatelib — Prise en charge des chaînes de modèle¶
Ce module prend en charge les chaînes de modèle (t-strings) telles que définies dans la PEP 750. Les chaînes de modèle sont créées à l’aide du préfixe t et donnent accès à la fois aux parties littérales de la chaîne et aux valeurs interpolées avant qu’elles ne soient combinées.
Disponibilité : Les chaînes de modèle ne sont pas prises en charge sur les OpenMV Cams basées sur STM32. Elles sont disponibles uniquement sur les OpenMV Cams basées sur Alif et i.MX RT.
Classes¶
- class string.templatelib.Template(*args)¶
Représente une chaîne de modèle. Les objets Template sont généralement créés par la syntaxe t-string (
t"...") mais peuvent également être construits directement à l’aide du constructeur.- strings¶
Un tuple de chaînes littérales qui apparaissent entre les interpolations.
- interpolations¶
Un tuple d’objets
Interpolationreprésentant les expressions interpolées.
- values¶
Une propriété en lecture seule qui renvoie un tuple contenant l’attribut
valuede chaque interpolation du modèle.
- __iter__() Iterator¶
Itère sur le contenu du modèle, produisant les parties de chaîne et les objets
Interpolationdans l’ordre où ils apparaissent. Les chaînes vides sont omises.
- __add__(other: Template) Template¶
Concatène deux modèles. Renvoie un nouveau
Templatecombinant les chaînes et les interpolations des deux modèles.La concaténation de modèle avec
strest interdite pour éviter toute ambiguïté quant à savoir si la chaîne doit être traitée comme un littéral ou une interpolationt1 = 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 = '')¶
Représente une expression interpolée au sein d’une chaîne de modèle. Tous les arguments peuvent être passés en tant qu’arguments nommés.
- value¶
La valeur évaluée de l’expression interpolée.
- expression¶
La représentation sous forme de chaîne de l’expression telle qu’elle apparaissait dans la chaîne de modèle.
- conversion¶
Le spécificateur de conversion (
's'ou'r') s’il est présent, sinonNone. Notez que MicroPython ne prend pas en charge la conversion'a'.
- format_spec¶
La chaîne de spécification de format si elle est présente, sinon une chaîne vide.
Syntaxe des chaînes de modèle¶
Les chaînes de modèle utilisent la même syntaxe que les f-strings mais avec un préfixe t
name = "World"
template = t"Hello {name}!"
# Access template components
print(template.strings) # ('Hello ', '!')
print(template.values) # ('World',)
print(template.interpolations[0].expression) # 'name'
Spécificateurs de conversion¶
Les chaînes de modèle stockent les spécificateurs de conversion sous forme de métadonnées. Contrairement aux f-strings, la conversion n’est pas appliquée automatiquement
value = "test"
t = t"{value!r}"
# t.interpolations[0].value == "test" (not repr(value))
# t.interpolations[0].conversion == "r"
Le code de traitement doit appliquer explicitement les conversions lorsque nécessaire.
Spécifications de format¶
Les spécifications de format sont stockées sous forme de métadonnées dans l’objet Interpolation. Contrairement aux f-strings, le formatage n’est pas appliqué automatiquement
pi = 3.14159
t = t"{pi:.2f}"
# t.interpolations[0].value == 3.14159 (not formatted)
# t.interpolations[0].format_spec == ".2f"
Conformément à la PEP 750, le code de traitement n’est pas tenu d’utiliser les spécifications de format, mais lorsqu’elles sont présentes, elles doivent être respectées et correspondre au comportement des f-strings dans la mesure du possible.
Format de débogage¶
Le format de débogage {expr=} est pris en charge
x = 42
t = t"{x=}"
# t.strings == ("x=", "")
# t.interpolations[0].expression == "x"
# t.interpolations[0].conversion == "r"
Important
Conformément à la PEP 750, et contrairement aux f-strings, les chaînes de modèle n’appliquent pas automatiquement les conversions ou les spécifications de format. Ceci est intentionnel afin de permettre au code de traitement de contrôler la façon dont ils sont gérés. Le code de traitement doit gérer explicitement ces attributs.
MicroPython ne fournit pas la fonction intégrée format(). Utilisez plutôt des méthodes de formatage de chaîne telles que str.format().
Exemple d’utilisation¶
Traitement de base sans prise en charge du format
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)
Traitement d’un modèle avec prise en charge du format
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"
Exemple d’échappement 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>"
Voir aussi¶
PEP 750 - Spécification des chaînes de modèle
Format string syntax - Syntaxe des chaînes de format
Littéraux de chaîne formatés - f-strings en Python