Comment by blueflow
3 days ago
I fail to see the purpose of f-strings if they end up as complex as printf formatting. Maybe use printf at this point?
3 days ago
I fail to see the purpose of f-strings if they end up as complex as printf formatting. Maybe use printf at this point?
I think the purpose is to put variables directly in the string literal instead of calling `printf`. Looking at an f-string immediately tells you where each value will be located in the output. `printf` requires you to read the format string, then look at the arguments, then count where a particular value will be printed.
`printf`/`str.format` are also prone to nasty failures: if you forget a variable (e.g., `str.format("{} {} {}", 0, 1)`), you only find out when you crash with an IndexError at runtime.
I would expect that linters can pick up this sort of thing pretty easily.
You don't really need to use any of these. Really the most useful one is f"{var=}" for us print() debuggers. But f"{var:#x}" is the same as f"{hex(var)}", so feel free to pick whatever you prefer.
Sometimes you need a formatted string outside of a printf content.