[Python-ideas] Briefer string format

Ron Adam ron3200 at gmail.com
Fri Aug 7 17:56:19 CEST 2015



On 08/07/2015 04:12 AM, Guido van Rossum wrote:

> Maybe in the end the f-string proposal is the right one -- it's minimally
> obtrusive and yet explicit, *and* backwards compatible? This isn't saying
> I'm giving up on always-interpolation; there seems to be at least an even
> split between languages that always interpolate (PHP?), languages that have
> a way to explicitly disable it (like single quotes in shell), and languages
> that require some sort of signal (like C#).

I think one of the advantages of f-strings is they are explicitly created 
in the context of where the scope is defined.  That scope includes 
non-locals too.  So locals, and globals is a narrower selection than the 
defined static scope.  Non-locals can't mask globals if they aren't 
included.  So "...".format(*locals(), **globals()) is not the same as when 
the names are explicitly supplied as keywords.

If it is opened up to dynamic scope, all bets are off.  That hasn't been 
suggested, but when functions use locals and globals as arguments, I think 
that is the security concern.

One of questions I have is, will there be a way to create an f-string other 
than by a literal.  So far, I think no, because it's not an object, but a 
protocol.   f"..." --->   "...".format(...).  That doesn't mean we can't 
have a function to do that.  Currently the best way would be to do 
eval('f"..."'), but it wouldn't be exactly the same because eval does not 
include the non-local part of the scope.  It seems that hasn't been an an 
issue for other things, so maybe it's not an issue here as well.

If all strings get scanned, I think it could complicate how strings act in 
various contexts.  For example when a string is used both as f-string and 
then gets used again as a template or pattern.  That suggests there should 
be a way to turn that scanning off for some strings.  (?)

So far I'm -1 on all strings, but +.25 on the explicit f-string.
(Still waiting to see the PEP before I give it a full +1.)

Cheers,
    Ron
















More information about the Python-ideas mailing list