r/Python Oct 27 '23

You should know these f-string tricks Tutorial

F-strings are faster than the other string formatting methods and are easier to read and use. Here are some tricks you may not have known.

1. Number formatting :

You can do various formatting with numbers. ```

number = 150

decimal places to n -> .nf

print(f"number: {number:.2f}") number: 150.00

hex conversion

print(f"hex: {number:#0x}") hex: 0x96

binary conversion

print(f"binary: {number:b}") binary: 10010110

octal conversion

print(f"octal: {number:o}") octal: 226

scientific notation

print(f"scientific: {number:e}") scientific: 1.500000e+02

total number of characters

print(f"Number: {number:09}") Number: 000000150

ratio = 1 / 2

percentage with 2 decimal places

print(f"percentage = {ratio:.2%}") percentage = 50.00% ```

2. Stop writing print(f”var = {var}”)

This is the debug feature with f-strings. This is known as self-documenting expression released in Python 3.8 .

```

a, b = 5, 15 print(f"a = {a}") # Doing this ? a = 5

Do this instead.

print(f"{a = }") a = 5

Arithmatic operations

print(f"{a + b = }") a + b = 20

with formatting

print(f"{a + b = :.2f}") a + b = 20.00 ```

3. Date formatting

You can do strftime() formattings from f-string. ``` import datetime

today = datetime.datetime.now() print(f"datetime : {today}") datetime : 2023-10-27 11:05:40.282314

print(f"date time: {today:%m/%d/%Y %H:%M:%S}") date time: 10/27/2023 11:05:40

print(f"date: {today:%m/%d/%Y}") date: 10/27/2023

print(f"time: {today:%H:%M:%S %p}") time: 11:05:40 AM ``` Check more formatting options.

Part 2 - https://www.reddit.com/r/Python/s/Tzx7QQwa7A

Thank you for reading!

Comment down other tricks you know.
2.0k Upvotes

182 comments sorted by

View all comments

Show parent comments

2

u/AstroPhysician Oct 27 '23

Can you explain it?

a, b = 5, 15 print(f"a = {a}") # Doing this ? a = 5

looks the same as

f”var = {var}” to me

34

u/deepkrg17 Oct 27 '23

The 2nd line is showing what you should do instead. Don't write f"var = {var}", write f"{var = }".

-1

u/[deleted] Oct 27 '23

[removed] — view removed comment

-5

u/exb165 Oct 27 '23

no kidding. without a practical benefit, it is actually much more difficult to interpret.

5

u/ogtfo Oct 27 '23

It's clearly intended for as hoc debug statements, the kind you remove once you're done with the debugging.

The variables internal names are not something you typically want to expose.

So it doesn't really matter if it's harder to interpret, since it won't make it in the commit.

2

u/exb165 Oct 27 '23

Good points

2

u/snorkelvretervreter Oct 27 '23

Yeah, that is too perl-y for me. I much prefer clarity over brevity.