Y'know, I just read a few more posts over on python-ideas that I had missed somehow. I saw Guido's point about `**locals()` being too specialized and magical for beginners, which I agree with. And it's the other aspect of "magic" that makes me not like f-strings. The idea of *implicitly* getting values from the local scope (or really, the global_local_builtin scope) makes me worry about readers of code very easily missing what's really going on within an f-string.
I don't actually care about the code injection issues and that sort of thing. I mean, OK I care a little bit, but my actual concern is purely explicitness and readability. Which brought to mind a certain thought. While I don't like: f'My name is {name}, my age next year is {age+1}' I wouldn't have any similar objection to: 'My name is {name}, my age next year is {age+1}'.scope_format() Or scope_format('My name is {name}, my age next year is {age+1}') I realize that these could be completely semantically equivalent... but the function or method call LOOKS LIKE a runtime operation, while a one letter prefix just doesn't look like that (especially to beginners whom I might teach). The name 'scope_format' is ugly, and something shorter would be nicer, but I think this conveys my idea. Yours, David... On Sun, Aug 9, 2015 at 6:14 PM, David Mertz <me...@gnosis.cx> wrote: > On Sun, Aug 9, 2015 at 11:22 AM, Eric V. Smith <e...@trueblade.com> wrote: >> >> I think it has to do with the nature of the programs that people write. >> I write software for internal use in a large company. In the last 13 >> years there, I've written literally hundreds of individual programs, >> large and small. I just checked: literally 100% of my calls to >> %-formatting (older code) or str.format (in newer code) could be >> replaced with f-strings. And I think every such use would be an >> improvement. >> > > I'm sure that pretty darn close to 100% of all the uses of %-formatting > and str.format I've written in the last 13 years COULD be replaced by the > proposed f-strings (I suppose about 16 years for me, actually). But I > think that every single such replacement would make the programs worse. > I'm not sure if it helps to mention that I *did* actually "write the book" > on _Text Processing in Python_ :-). > > The proposal just continues to seem far too magical to me. In the > training I now do for Continuum Analytics (I'm in charge of the training > program with one other person), I specifically have a (very) little bit of > the lessons where I mention something like: > > print("{foo} is {bar}".format(**locals())) > > But I give that entirely as a negative example of abusing code and > introducing fragility. f-strings are really the same thing, only even more > error-prone and easier to get wrong. Relying on implicit context of the > runtime state of variables that are merely in scope feels very break-y to > me still. If I had to teach f-strings in the future, I'd teach it as a > Python wart. > > That said, there *is* one small corner where I believe f-strings add > something helpful to the language. There is no really concise way to spell: > > collections.ChainMap(locals(), globals(), __builtins__.__dict__). > > If we could spell that as, say `lgb()`, that would let str.format() or > %-formatting pick up the full "what's in scope". To my mind, that's the > only good thing about the f-string idea. > > Yours, David... > > -- > Keeping medicines from the bloodstreams of the sick; food > from the bellies of the hungry; books from the hands of the > uneducated; technology from the underdeveloped; and putting > advocates of freedom in prisons. Intellectual property is > to the 21st century what the slave trade was to the 16th. > -- Keeping medicines from the bloodstreams of the sick; food from the bellies of the hungry; books from the hands of the uneducated; technology from the underdeveloped; and putting advocates of freedom in prisons. Intellectual property is to the 21st century what the slave trade was to the 16th.
_______________________________________________ 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