string.templatelib — Mallimerkkijonojen tuki¶
Tämä moduuli tarjoaa tuen mallimerkkijonoille (t-stringit), jotka on määritelty kohdassa PEP 750. Mallimerkkijonot luodaan käyttäen t-etuliitettä, ja ne tarjoavat pääsyn sekä merkkijonon kirjaimellisiin osiin että interpoloituihin arvoihin ennen niiden yhdistämistä.
Saatavuus: Mallimerkkijonoja ei tueta STM32-pohjaisilla OpenMV Cam -laitteilla. Ne ovat saatavilla vain Alif- ja i.MX RT -pohjaisilla OpenMV Cam -laitteilla.
Luokat¶
- class string.templatelib.Template(*args)¶
Edustaa mallimerkkijonoa. Template-objektit luodaan tyypillisesti t-string-syntaksilla (
t"..."), mutta ne voidaan myös rakentaa suoraan konstruktorin avulla.- strings¶
Monikko merkkijonokirjaimista, jotka esiintyvät interpolointien välissä.
- interpolations¶
Monikko
Interpolation-objekteista, jotka edustavat interpoloituja lausekkeita.
- values¶
Vain luettava ominaisuus, joka palauttaa monikon, joka sisältää
value-attribuutin mallin jokaisesta interpoloinnista.
- __iter__() Iterator¶
Iteroi mallin sisällön läpi tuottaen merkkijono-osat ja
Interpolation-objektit siinä järjestyksessä, jossa ne esiintyvät. Tyhjät merkkijonot jätetään pois.
- __add__(other: Template) Template¶
Yhdistä kaksi mallia. Palauttaa uuden
Template-objektin, joka yhdistää merkkijonot ja interpoloinnit molemmista malleista.Mallin yhdistäminen
str-tyypin kanssa on kielletty epäselvyyden välttämiseksi siitä, tulisiko merkkijonoa käsitellä kirjaimellisena vai interpolointina: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 = '')¶
Edustaa mallimerkkijonon sisällä olevaa interpoloitua lauseketta. Kaikki argumentit voidaan välittää avainsana-argumentteina.
- value¶
Interpoloidun lausekkeen laskettu arvo.
- expression¶
Lausekkeen merkkijonoesitys sellaisena kuin se esiintyi mallimerkkijonossa.
- conversion¶
Muunnosmäärite (
's'tai'r'), jos sellainen on annettu, muutoinNone. Huomaa, että MicroPython ei tue'a'-muunnosta.
- format_spec¶
Muotoilumäärittelyn merkkijono, jos sellainen on annettu, muutoin tyhjä merkkijono.
Mallimerkkijonon syntaksi¶
Mallimerkkijonot käyttävät samaa syntaksia kuin f-stringit, mutta t-etuliitteellä:
name = "World"
template = t"Hello {name}!"
# Access template components
print(template.strings) # ('Hello ', '!')
print(template.values) # ('World',)
print(template.interpolations[0].expression) # 'name'
Muunnosmääritteet¶
Mallimerkkijonot tallentavat muunnosmääritteet metatietoina. Toisin kuin f-stringeissä, muunnosta ei sovelleta automaattisesti:
value = "test"
t = t"{value!r}"
# t.interpolations[0].value == "test" (not repr(value))
# t.interpolations[0].conversion == "r"
Käsittelykoodin on sovellettava muunnoksia eksplisiittisesti tarvittaessa.
Muotoilumäärittelyt¶
Muotoilumäärittelyt tallennetaan metatietoina Interpolation-objektiin. Toisin kuin f-stringeissä, muotoilua ei sovelleta automaattisesti:
pi = 3.14159
t = t"{pi:.2f}"
# t.interpolations[0].value == 3.14159 (not formatted)
# t.interpolations[0].format_spec == ".2f"
PEP 750:n mukaan käsittelykoodin ei tarvitse käyttää muotoilumäärittelyjä, mutta kun niitä on annettu, niitä tulisi noudattaa ja vastata f-stringien käyttäytymistä mahdollisuuksien mukaan.
Vianjäljitysmuoto¶
Vianjäljitysmuotoa {expr=} tuetaan:
x = 42
t = t"{x=}"
# t.strings == ("x=", "")
# t.interpolations[0].expression == "x"
# t.interpolations[0].conversion == "r"
Tärkeää
PEP 750:n mukaisesti, toisin kuin f-stringit, mallimerkkijonot eivät sovella muunnoksia tai muotoilumäärittelyjä automaattisesti. Tämä on suunniteltu niin, jotta käsittelykoodi voi hallita sitä, miten näitä käsitellään. Käsittelykoodin on käsiteltävä nämä attribuutit eksplisiittisesti.
MicroPython ei tarjoa sisäänrakennettua format()-funktiota. Käytä sen sijaan merkkijonon muotoilumetodeja, kuten str.format().
Esimerkkikäyttö¶
Peruskäsittely ilman muotoilutukea:
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)
Mallin käsittely muotoilutuella:
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"
HTML-koodinvaihdon esimerkki:
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>"
Katso myös¶
PEP 750 - Mallimerkkijonojen määrittely
Format string syntax - Muotoilumerkkijonon syntaksi
Formatted string literals - f-stringit Pythonissa