logoalt Hacker News

dwdztoday at 7:37 PM5 repliesview on HN

I'm not a fan of f-strings.

I feel like 90% of new Python features in the last 10 years just increased language complexity without any benefit.


Replies

ForceBrutoday at 8:03 PM

I'm a HUGE fan of f-strings and I think they should be added to more or less every language in existence. (This is just to show how much I like f-strings, not to be taken literally) `printf`-style format strings seem outdated: why use format strings when I can put my variables IN THE STRING? I want the result of `x+y` to be put {HERE} in this string. Well, just write `"This is here: {x+y} blah"` — it makes perfect sense and immediately lets me see what the resulting strings generally look like.

Basic usage is a no-brainer: write your string, put variables or short expressions in curly braces, add `printf`-style format specifiers after the colon. This is also great because it's a natural extension of `printf`-style format strings.

Of course you can write complicated and confusing f-strings. But then you can write complicated and confusing... anything, really. Many programming languages have extremely weird quirks and cases where basic syntax can be transformed into an unreadable monstrosity, like C syntax for pointers to functions and arrays.

Sure, this increases the language's complexity, but you don't have to use all of it to reap the benefits.

show 2 replies
vova_hn2today at 9:36 PM

I like f-strings but I don't like that there are at least five ways to format stings.

1. %-formatting [1]

2. str.format [2]

3. string.Template [3]

4. f-string [4]

5. t-string [5]

What happened to "one-- and preferably only one --obvious way to do it"? [6]

Also, the way string formatting interacts with logging is a total mess. People just pass f-strings to logging, which seems to be an intuitive way to do it. Except it limits your options if you want to collect structured logs and it doesn't allow you to use late evaluation based on log level.

[1] https://docs.python.org/3/library/string.html#format-example...

[2] https://docs.python.org/3/library/stdtypes.html#str.format

[3] https://docs.python.org/3/library/string.html#string.Templat...

[4] https://docs.python.org/3/reference/lexical_analysis.html#f-...

[5] https://docs.python.org/3/reference/lexical_analysis.html#t-...

[6] https://peps.python.org/pep-0020/

show 2 replies
ajrouvoettoday at 8:08 PM

It is baffling to me that Python seems to insist on reinventing language features and coming up with the most incomprehensible of designs. The whole dataclass and serialisation ecosystem comes to mind, as well as the evolution of typing.

The language exposes so much of its internals that even if the design were consistent, the ecosystem of (buggy) libs and tools makes it inconsistent.

show 1 reply
odyssey7today at 10:20 PM

It doesn’t have to be beneficial, it just has to be “pythonic.”

analog31today at 7:52 PM

Indeed, and I get that one can ignore those features (I do), but finding them in existing code or having the AI coding agent use them diminishes the "easy for beginners" aspect.

show 2 replies