[Python-Dev] PEP-498: Literal String Formatting
Raymond Hettinger
raymond.hettinger at gmail.com
Sun Aug 9 03:19:49 CEST 2015
> On Aug 7, 2015, at 6:39 PM, Eric V. Smith <eric at trueblade.com> wrote:
>
> I'm open to any suggestions to improve the PEP. Thanks for your feedback.
Here's are few thoughts:
* I really like the reduction in verbosity for passing in the variable names.
* Because of my C background, I experience a little mental hiccup when using
the f-prefix with the print() function:
print(f"The answer is {answer}")
wants to come out of my fingers as:
printf("The answer is {answer}")
* It's unclear whether the string-to-expression-expansion should be arbitrarily
limited to locals() and globals() or whether it should include __builtins__ and
cell variables (closures and nested scopes). Making it behave just like
normal expressions means that there won't be new special cases to remember
and that many existing calls to format() can be converted automatically:
w = 10
def f(x):
def g(y):
print(f'{len.__name__}{w}{x}{y}')
* Will this proposal complicate linters, analysis tools, highlighters, etc.?
In a way, this isn't a small language extension, it is a whole new way
to write expressions.
* Does it complicate situations where we would otherwise pass around
templates as first class class objects (internationalization for example)?
def welcome(name, title):
print(_("Good morning {title} {name}")) # expect gettext() substitution
* A related thought is that we normally like templates to live outside the
functions where they are used (separation of business logic and presentation
logic). Use of f-strings may impact our ability to refactor (move code up or
down a chain of nested function calls), ability to pass in templates as arguments,
storing templates in globals or thread locals so that they are shareable, or
moving them out of our scripts and into files editable by non-programmers.
* With respect to learnability, the downside is that it becomes yet another thing
to have to cover in a Python class (I'm already not looking forward teaching
star-unpacking generalizations and the restraint to not overuse them, and
covering await, and single dispatch, etc, etc). The upside is that templates
themselves aren't being changed. The only incremental learning task is the
invocation becomes automatic, saving us a little typing.
The above above are random thoughts based a first quick read. Don't take
them too seriously. Some are just shooting from the hip and are listed as food
for thought.
Raymond
More information about the Python-Dev
mailing list