when were f strings added to python code example

Example 1: f string repr

# If you want to use repr in f-string use "!r"
# Normal behavior (using str)
>>> color = "blue\ngreen"
>>> day = datetime.date(2020, 6, 4)
>>> f"Color is {color} and day is {day}"
'Color is blue\ngreen and day is 2020-06-04'
# Alternate behavior (using repr)
>>> f"Color is {color!r} and day is {day!r}"
"Color is 'blue\\ngreen' and day is datetime.date(2020, 6, 4)"

Example 2: python f string

>>> name = "Eric"
>>> age = 74
>>> f"Hello, {name}. You are {age}."
'Hello, Eric. You are 74.'

Example 3: python f string literal

# This answer might be long, but it explains more python f-strings, how to use them and when to use them.
# Python f-strings are used to write code faster.
# Here is an example:
name = "George"
age = 16
favorite_food = "pizza"

# Instead of doing this:
print("My name is", name, ", my age is", age, ", and my favorite food is", favorite_food)

# Or this:
print("My name is "+ name +", my age is "+ str(age)+ ", and my favorite food is "+ favorite_food)

# You could do this:
print(f"My name is {name}, my age is {age}, and my favorite food is {favorite_food}")

# You see that the code looks a little cleaner, and as you start using f-strings you realize you write much faster.
"""
Why put the f before the string, you ask?
Well if you didnt, the output would literally be {name} instead of the actual variable
One more thing: this is fairly new and only works with python 3.6 and higher.
"""

Example 4: format specificer f strings python

#!/usr/bin/env python3

val = 12.3

print(f'{val:.2f}')
print(f'{val:.5f}')

Example 5: python f string

import math

print('[[fill]align]                | f\'{"text":10}\'      | ', f'{"text":10}')        # text
print('[[fill]align]                | f\'{"text":>10}\'     | ', f'{"text":>10}')       #       text
print('[[fill]align]                | f\'{"text":^10}\'     | ', f'{"text":^10}')       #    text
print('[[fill]align]                | f\'{"text":#>10}\'    | ', f'{"text":#>10}')      # ######text
print('[[fill]align]                | f\'{"text":#<10}\'    | ', f'{"text":#<10}')      # text######
print('[[fill]align]                | f\'{"text":#^10}\'    | ', f'{"text":#^10}')      # ###text###
print('[[fill]align] with numbers   | f\'{12345:0=10}\'     | ', f'{12345:0=10}')       # 0000012345
print('[[fill]align] with numbers   | f\'{-12345:0=10}\'    | ', f'{-12345:0=10}')      # -000012345      
print('[[fill]align] with numbers   | f\'{12345:010}\'      | ', f'{12345:010}')        # 0000012345
print('[[fill]align] with numbers   | f\'{-12345:010}\'     | ', f'{-12345:010}')       # -000012345
print('[.precision]                 | f\'{math.pi:.2f}\'    | ', f'{math.pi:.2f}')      # 3.14
print('[grouping_option]            | f\'{1000000:,.2f}\'   | ', f'{1000000:,.2f}')     # 1,000,000.00
print('[grouping_option]            | f\'{1000000:_.2f}\'   | ', f'{1000000:_.2f}')     # 1_000_000.00
print('[sign] (+/-)                 | f\'{12345:+}\'        | ', f'{12345:+}')          # +12345
print('[sign] (+/-)                 | f\'{-12345:+}\'       | ', f'{-12345:+}')         # -12345
print('[sign] (+/-)                 | f\'{12345:+10}\'      | ', f'{12345:+10}')        #     +12345
print('[sign] (+/-)                 | f\'{-12345:+10}\'     | ', f'{-12345:+10}')       #     -12345
print('[sign] (+/-)                 | f\'{12345:+010}\'     | ', f'{12345:+010}')       # +000012345
print('[sign] (+/-)                 | f\'{-12345:+010}\'    | ', f'{-12345:+010}')      # -000012345
print('[b] (binary)                 | f\'{10:b}\'           | ', f'{10:b}')             # 1010
print('[o] (octal)                  | f\'{10:o}\'           | ', f'{10:o}')             # 12
print('[x] (hexadecimal)            | f\'{100:x}\'          | ', f'{100:x}')            # 64
print('[#b] (with notation base)    | f\'{10:#b}\'          | ', f'{10:#b}')            # 0b1010
print('[#0] (with notation base)    | f\'{10:#o}\'          | ', f'{10:#o}')            # 0o12
print('[#x] (with notation base)    | f\'{10:#x}\'          | ', f'{10:#x}')            # 0xa
print('[e] (scientific notation)    | f\'{345600000000:e}\' | ', f'{345600000000:e}')   # 3.456000e+11
print('[c] (character type)         | f\'{65:c}\'           | ', f'{65:c}')             # A
print('percentage (multiply by 100) | f\'{0.25:0%}\'        | ', f'{0.25:0%}')          # 25.000000%
print('percentage (multiply by 100) | f\'{0.25:.0%}\'       | ', f'{0.25:.0%}')         # 25%