On 19.09.15 14:03, Eric V. Smith wrote:
While finishing up the implementation of PEP 498, I realized that the
PEP has an error. It says that this code:

f'abc{expr1:spec1}{expr2!r:spec2}def{expr3:!s}ghi'

Is equivalent to:

'abc' + expr1.__format__(spec1) + repr(expr2).__format__(spec2) + 'def'
+ str(expr3).__format__('') + 'ghi'

But that's not correct. The right way to call __format__ is:

type(expr1).__format__(expr1, spec1)

That is, the lookup of __format__ is done on the type, not the instance.

Instead of calling __format__, I've changed the code generator to call
format(expr1, spec1). As an optimization, I might add special opcodes to
deal with this and string concatenation, but that's for another day (if
ever).

Concatenating many strings is not efficient. More efficient way is to use string formatting. Why not translate f-string to

    'abc%s%sdef%sghi' % (format(expr1, spec1),
                         format(repr(expr2), spec2), expr3)

or even to

    'abc{:spec1}{!r:spec2}def{!s}ghi'.format(expr1, expr2, expr3)

?


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to