
На заре мы писали так, когда хотели распечатать значение переменной рядом с ее именем:
my_var, foo = 10, "abc"
print('Debug my_var =', my_var, 'and foo = "' + foo + '"')
Потом нам показали f-строки, и мы стали писать так:
print(f'Debug my_var = {my_var} and foo = "{foo}"')
И все бы ничего, если бы не приходилось каждый раз дублировать название переменной до знака "равно" и после в фигурных скобках!
К счастью в версии Python 3.8 нас ждал королевский подарок, а именно возможность печатать за один раз и название, и значение переменной, просто добавив в конце знак "равно". Вот так:
print(f'Debug {my_var=} and {foo=}')
# Напечатает: Debug my_var=10 and foo='abc'
Если кавычки для строки не нужны, можно указать спецификатор !s:
print(f'{foo=!s}') # foo=abc
Удивительно, но пробелы, которые вы оставите в строке формата, также перенесутся на результат:
print(f'{foo = }') # foo = 'abc'
Причем это может быть необязательно переменная, а целое выражение, причем левая часть будет ровно в той форме, что и в форматной строке, ну не прекрасно ли это?
print(f'{len([1, 2, 3]) = } and {10 + 5 * 3 = }')
# Напечатает: len([1, 2, 3]) = 3 and 10 + 5 * 3 = 25
Также после равно могут идти любые прежние спецификаторы формата, например, указание точности числа с запятой:
print(f'{my_var = :.2f}')
# my_var = 10.00
Или вот такое оформление:
print(f'{foo = :-^20}')
# foo = --------abc---------
Теперь ваша отладка принтами (или логгирование) станет легче и быстрее.