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