[issue28308] Accelerate 'string'.format(value, ...) by using formatted string literals

Eric V. Smith report at bugs.python.org
Thu Sep 29 05:09:55 EDT 2016


Eric V. Smith added the comment:

One thing to be careful of here is that there's one slight difference between how str.format() and f-strings handle indexing of values. f-strings, of course, use normal Python semantics, but 
str.format() treats indexing by things that don't look like integers as string literals, not variables. It's an unfortunate left-over from the original PEP-3101 specification:

>>> d = {'a':'string', 0:'integer'}
>>> a = 0
>>> f'{d[0]}'
'integer'
>>> '{d[0]}'.format(d=d)
'integer'
>>> f'{d[a]}'
'integer'
>>> '{d[a]}'.format(d=d)
'string'

Note that the exact same expression {d[a]} is evaluated differently by the two ways to format.

There's a test for this in test_fstring.py.

Someday, I'd like to deprecate this syntax in str.format(). I don't think it could ever be added back in, because it requires either additional named parameters which aren't used as formatting parameters, or it requires global/local lookups (which isn't going to happen).

i.e., this:
'{d[a]}'.format(d=d, a=a)

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue28308>
_______________________________________


More information about the Python-bugs-list mailing list