
On Aug 7, 2015, at 6:39 PM, Eric V. Smith <eric@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