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 <rep...@bugs.python.org>
<http://bugs.python.org/issue28308>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to