[Python-ideas] Briefer string format
Stefan Behnel
stefan_ml at behnel.de
Sat Aug 8 18:49:30 CEST 2015
Mike Miller schrieb am 20.07.2015 um 01:35:
> csstext += '{nl}{key}{space}{{{nl}'.format(**locals())
>
> This looks a bit better if you ignore the right half, but it is longer and not
> as simple as one might hope. It is much longer still if you type out the
> variables needed as kewword params! The '{}' option is not much improvement
> either.
>
> csstext += '{nl}{key}{space}{{{nl}'.format(nl=nl, key=key, ... # uggh
> csstext += '{}{}{}{{{}'.format(nl, key, space, nl)
>
> I've long wished python could format strings easily like bash or perl do, ...
> and then it hit me:
>
> csstext += f'{nl}{key}{space}{{{nl}'
>
> An "f-formatted" string could automatically format with the locals dict. Not
> yet sure about globals, and unicode only suggested for now. Perhaps could be
> done directly to avoid the .format() function call, which adds some overhead
> and tends to double the length of the line?
Is this an actual use case that people *commonly* run into? I understand
that the implicit name lookups here are safe and all that, but I cannot
recall ever actually using locals() for string formatting.
The above looks magical to me. It's completely unclear that string
interpolation is happening behind my back here, unless I already know it. I
think it's ok to have a "b" string prefix produce a special kind of string
and expect people to guess that and look up what it does if they don't know
(and syntax like a string prefix is difficult enough to look up already).
Having an "f" prefix interpolate the string with names from the current
namespace is way beyond what I would expect a string prefix to do.
I'd prefer not seeing a "cool feature" added just "because it's cool". If
it additionally is magic, it's usually not a good idea.
Stefan
More information about the Python-ideas
mailing list