string.templatelib
— Stöd för mallsträngslitteraler¶
Källkod: Lib/string/templatelib.py
Mall för strängar¶
Tillagd i version 3.14.
Template strings är en mekanism för anpassad strängbehandling. De har samma flexibilitet som Pythons f-strängar, men returnerar en Template
-instans som ger tillgång till de statiska och interpolerade (inom hakparenteser) delarna av en sträng innan de kombineras.
För att skriva en t-sträng använder du ett 't'
-prefix istället för ett 'f'
, så här:
>>> pi = 3.14
>>> t't-strings are new in Python {pi!s}!'
Template(
strings=('t-strings are new in Python ', '!'),
interpolations=(Interpolation(3.14, 'pi', 's', ''),)
)
Typer¶
- class string.templatelib.Template¶
Klassen
Template
beskriver innehållet i en mallsträng. Den är oföränderlig, vilket innebär att attribut i en mall inte kan tilldelas på nytt.Det vanligaste sättet att skapa en
Template
-instans är att använda template string literal syntax. Denna syntax är identisk med den för f-strings, förutom att den använder ettt
-prefix i stället för ettf
:>>> cheese = 'Red Leicester' >>> template = t"We're fresh out of {cheese}, sir." >>> type(template) <class 'string.templatelib.Template'>
Mallar lagras som sekvenser av bokstavliga
strings
och dynamiskainterpolations
. Ett attributvalues
innehåller värdena för interpoleringen:>>> cheese = 'Camembert' >>> template = t'Ah! We do have {cheese}.' >>> template.strings ('Ah! We do have ', '.') >>> template.interpolations (Interpolation('Camembert', ...),) >>> template.values ('Camembert',)
Tupeln
strings
har ett element mer äninterpolations
ochvalues
; interpolationerna ”hör hemma” mellan strängarna. Detta kan vara lättare att förstå när tuplerna är inriktadetemplate.strings: ('Ah! We do have ', '.') template.values: ( 'Camembert', )
Attribut
- strings: tuple[str, ...]¶
En
tupel
av de statiska strängarna i mallen.>>> cheese = 'Camembert' >>> template = t'Ah! We do have {cheese}.' >>> template.strings ('Ah! We do have ', '.')
Tomma strängar inkluderas i tupeln:
>>> response = 'We do have ' >>> cheese = 'Camembert' >>> template = t'Ah! {response}{cheese}.' >>> template.strings ('Ah! ', '', '.')
Tupeln
strings
är aldrig tom och innehåller alltid en sträng mer än tuplarnainterpolations
ochvalues
:>>> t''.strings ('',) >>> t''.values () >>> t'{'cheese'}'.strings ('', '') >>> t'{'cheese'}'.values ('cheese',)
- interpolations: tuple[Interpolation, ...]¶
En
tupel
av interpoleringarna i mallen.>>> cheese = 'Camembert' >>> template = t'Ah! We do have {cheese}.' >>> template.interpolations (Interpolation('Camembert', 'cheese', None, ''),)
Tupeln
interpolations
kan vara tom och innehåller alltid ett värde mindre än tupelnstrings
:>>> t'Red Leicester'.interpolations ()
- values: tuple[object, ...]¶
En tupel av alla interpolerade värden i mallen.
>>> cheese = 'Camembert' >>> template = t'Ah! We do have {cheese}.' >>> template.values ('Camembert',)
Tupeln
values
har alltid samma längd som tupelninterpolations
. Den är alltid ekvivalent medtuple(i.value for i in template.interpolations)
.
Metoder
- __new__(*args: str | Interpolation)¶
Även om litteral syntax är det vanligaste sättet att skapa en
Template
, är det också möjligt att skapa dem direkt med hjälp av konstruktören:>>> from string.templatelib import Interpolation, Template >>> cheese = 'Camembert' >>> template = Template( ... 'Ah! We do have ', Interpolation(cheese, 'cheese'), '.' ... ) >>> list(template) ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, ''), '.']
Om flera strängar skickas i följd kommer de att sammanfogas till ett enda värde i attributet
strings
. Följande kod skapar t.ex. enTemplate
med en enda slutsträng:>>> from string.templatelib import Template >>> template = Template('Ah! We do have ', 'Camembert', '.') >>> template.strings ('Ah! We do have Camembert.',)
Om flera interpoleringar skickas i följd kommer de att behandlas som separata interpoleringar och en tom sträng kommer att infogas mellan dem. Följande kod skapar t.ex. en mall med tomma platshållare i attributet
strings
:>>> from string.templatelib import Interpolation, Template >>> template = Template( ... Interpolation('Camembert', 'cheese'), ... Interpolation('.', 'punctuation'), ... ) >>> template.strings ('', '', '')
- iter(template)
Iterera över mallen, vilket ger varje icke-tom sträng och
Interpolation
i rätt ordning:>>> cheese = 'Camembert' >>> list(t'Ah! We do have {cheese}.') ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, ''), '.']
Försiktighet
Tomma strängar ingår inte i iterationen:
>>> response = 'We do have ' >>> cheese = 'Camembert' >>> list(t'Ah! {response}{cheese}.') ['Ah! ', Interpolation('We do have ', 'response', None, ''), Interpolation('Camembert', 'cheese', None, ''), '.']
- template + other
- template += other
Sammanfoga denna mall med en annan och returnera en ny
Template
-instans:>>> cheese = 'Camembert' >>> list(t'Ah! ' + t'We do have {cheese}.') ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, ''), '.']
Att sammanfoga en
Template
och enstr
stöds inte. Detta beror på att det är oklart om strängen ska behandlas som en statisk sträng eller en interpolation. Om du vill konkatenera enTemplate
med en sträng, bör du antingen linda in strängen direkt i enTemplate
(för att behandla den som en statisk sträng) eller använda enInterpolation
(för att behandla den som dynamisk):>>> from string.templatelib import Interpolation, Template >>> template = t'Ah! ' >>> # Treat 'We do have ' as a static string >>> template += Template('We do have ') >>> # Treat cheese as an interpolation >>> cheese = 'Camembert' >>> template += Template(Interpolation(cheese, 'cheese')) >>> list(template) ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, '')]
- class string.templatelib.Interpolation¶
Typen
Interpolation
representerar ett uttryck inuti en mallsträng. Den är oföränderlig, vilket innebär att attribut för en interpolation inte kan tilldelas på nytt.Interpolationer stöder mönstermatchning, vilket gör att du kan matcha mot deras attribut med match statement:
>>> from string.templatelib import Interpolation >>> interpolation = t'{1. + 2.:.2f}'.interpolations[0] >>> interpolation Interpolation(3.0, '1. + 2.', None, '.2f') >>> match interpolation: ... case Interpolation(value, expression, conversion, format_spec): ... print(value, expression, conversion, format_spec, sep=' | ') ... 3.0 | 1. + 2. | None | .2f
Attribut
- expression: str¶
Texten i ett giltigt Python-uttryck, eller en tom sträng.
expression
är originaltexten för interpolerings Python-uttryck, om interpoleringen skapades från en t-string-litteral. Utvecklare som skapar interpoleringen manuellt bör antingen sätta detta till en tom sträng eller välja ett lämpligt giltigt Python-uttryck.>>> t'{1 + 2}'.interpolations[0].expression '1 + 2'
- conversion: Literal['a', 'r', 's'] | None¶
Den konvertering som ska tillämpas på värdet, eller
None
.conversion
är den valfria konvertering som ska tillämpas på värdet:>>> t'{1 + 2!a}'.interpolations[0].conversion 'a'
Anteckning
Till skillnad från f-strängar, där konverteringar tillämpas automatiskt, är det förväntade beteendet med t-strängar att kod som behandlar
Template
bestämmer hur den ska tolka och om den ska tillämpaconversion
. För enkelhetens skull kan funktionenconvert()
användas för att efterlikna semantiken för konvertering av f-strängar.
- format_spec: str¶
Den formatspecifikation som ska tillämpas på värdet.
format_spec
är en valfri, godtycklig sträng som används som formatspecifikation för att presentera värdet:>>> t'{1 + 2:.2f}'.interpolations[0].format_spec '.2f'
Anteckning
Till skillnad från f-strängar, där formatspecifikationer tillämpas automatiskt via protokollet
format()
, är det förväntade beteendet med t-strängar att koden som bearbetar interpoleringen bestämmer hur formatspecifikationen ska tolkas och om den ska tillämpas. Som ett resultat kanformat_spec
-värden i interpoleringar vara godtyckliga strängar, inklusive de som inte överensstämmer medformat()
-protokollet.
Metoder
- __new__(value: object, expression: str, conversion: Literal['a', 'r', 's'] | None = None, format_spec: str = '')¶
Skapa ett nytt
Interpolation
-objekt av olika komponenter.- Parametrar:
value – Det utvärderade resultatet av interpoleringen, inom räckvidden.
expression – Texten i ett giltigt Python-uttryck, eller en tom sträng.
conversion – Den konvertering som ska användas, en av
None
,'a'
,'r'
eller's'
.format_spec – En valfri, godtycklig sträng som används som formatspecifikation för att presentera värdet.
Hjälpfunktioner¶
- string.templatelib.convert(obj, /, conversion)¶
Tillämpar formaterad strängbokstäver konvertering semantik på det givna objektet obj. Detta är ofta användbart för anpassad logik för bearbetning av mallsträngar.
Tre konverteringsflaggor stöds för närvarande:
's'
som anroparstr()
på värdet (som!s
),'r'
som anroparrepr()
(som!r
), och'a'
som anroparascii()
(som!a
).
Om konverteringsflaggan är
None
returneras obj oförändrad.