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
Templatebeskriver 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
stringsoch dynamiskainterpolations. Ett attributvaluesinnehå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
stringshar ett element mer äninterpolationsochvalues; 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
tupelav 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 tuplarnainterpolationsochvalues:>>> t''.strings ('',) >>> t''.values () >>> t'{'cheese'}'.strings ('', '') >>> t'{'cheese'}'.values ('cheese',)
- interpolations: tuple[Interpolation, ...]¶
En
tupelav interpoleringarna i mallen.>>> cheese = 'Camembert' >>> template = t'Ah! We do have {cheese}.' >>> template.interpolations (Interpolation('Camembert', 'cheese', None, ''),)
Tupeln
interpolationskan 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
valueshar 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. enTemplatemed 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
Interpolationi 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
Templateoch enstrstö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 enTemplatemed 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
Interpolationrepresenterar 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
Templatebestä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
Nonereturneras obj oförändrad.