[Python-ideas] template strings
Eric V. Smith
eric at trueblade.com
Wed Aug 19 21:11:45 CEST 2015
On 08/19/2015 02:11 PM, Eric V. Smith wrote:
> On 08/17/2015 04:13 PM, Yury Selivanov wrote:
>> In ECMAScript 6 there is a concept of Template Strings [1]. What if we add
>> something similar in Python?
>>
>> Some key ideas
>> --------------
>>
>> 1. Template Strings (TS) will be built on top of PEP 498 machinery (if
>> accepted).
>>
>> 2. The syntax will match the following:
>>
>> {python identifier}{optional whitespace}{string literal}
>>
>> where "python identifier" can be any valid python name *except* r, u, b,
>> or f.
>>
>> Some examples of valid TS:
>>
>> ##
>> _'foo {bar}'
>>
>> ##
>> sql = db.escape
>> sql """
>> SELECT ... FROM ...
>> """
>>
>> ##
>> from framework import html
>> html"""
>> <div class="caption">
>> {caption}
>> </div>
>> """
>>
>> 3. A special magic method will be added: __format_str__(string,
>> values_map).
>>
>> For instance,
>>
>> b = 10
>> print(_'something { b+1 }')
>>
>> will be equivalent to
>>
>> b = 10
>> print(_.__format_str__('something { b+1 }', {' b+1 ': b + 1}))
>>
>> (or however PEP 498 will be implemented).
>
> I'm not convinced this is a great idea. It's almost like it wants to be
> a way to pass in ASTs to functions, but only for the limited case of
> f-string expressions. Maybe that's as far as we'll ever want to go, and
> this is good enough.
>
> As you say, it would allow easy implementation of i18n on top of PEP 498.
>
> If we do go this route, we should reserve some names for Python's own
> use in the lexer. For example, if this proposal were in place before we
> added bytes strings, there would be no easy way to add them.
Also, how would this interact with raw strings? For PEP 498, I have:
>>> f'\n{0}'
'\n0'
>>> fr'\n{0}'
'\\n0'
How would you have raw template strings?
Eric.
More information about the Python-ideas
mailing list