Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое f строка
f-строка (formatted string literal) — это способ форматирования строк в Python, введённый в версии 3.6. Она позволяет встраивать переменные и выражения прямо в строку, используя фигурные скобки {} с префиксом f. Это наиболее быстрый и читаемый способ форматирования строк в современном Python.
Базовый синтаксис
# Встраивание переменной
name = 'Алиса'
age = 25
print(f'Меня зовут {name}, мне {age} лет')
# Вывод: Меня зовут Алиса, мне 25 лет
# Встраивание выражения
result = 10 + 5
print(f'10 + 5 = {result}')
# Вывод: 10 + 5 = 15
Сравнение способов форматирования
1. Старый способ % (Deprecated):
name = 'Боб'
age = 30
print('Имя: %s, возраст: %d' % (name, age))
2. .format() метод:
print('Имя: {}, возраст: {}'.format(name, age))
print('Имя: {0}, возраст: {1}'.format(name, age))
print('Имя: {name}, возраст: {age}'.format(name=name, age=age))
3. f-строка (рекомендуется):
print(f'Имя: {name}, возраст: {age}')
# Самая читаемая и быстрая!
Встраивание выражений
# Арифметика
x = 10
y = 20
print(f'{x} + {y} = {x + y}') # 10 + 20 = 30
# Вызов функции
print(f'Длина строки: {len("Hello")}') # Длина строки: 5
# Список и словарь
data = {'name': 'Алиса', 'city': 'Москва'}
print(f'Имя: {data["name"]}, город: {data["city"]}')
# Слайсинг
text = 'Python'
print(f'Первые 3 буквы: {text[:3]}') # Первые 3 буквы: Pyt
# Тернарный оператор
age = 25
print(f'Возраст: {age if age >= 18 else "несовершеннолетний"}')
Форматирование чисел
# Количество знаков после запятой
price = 123.456
print(f'Цена: {price:.2f}') # Цена: 123.46
print(f'Цена: {price:.1f}') # Цена: 123.5
# Выравнивание
print(f'{price:>10}') # Выравнивание вправо: ' 123.456'
print(f'{price:<10}') # Выравнивание влево: '123.456 '
print(f'{price:^10}') # По центру: ' 123.456 '
# Заполнение нулями
num = 42
print(f'{num:05d}') # 00042
# Разделитель тысяч
big_num = 1000000
print(f'{big_num:,}') # 1,000,000
print(f'{big_num:_}') # 1_000_000
# Процентный формат
ratio = 0.75
print(f'{ratio:.1%}') # 75.0%
# Экспоненциальная нотация
small = 0.00001
print(f'{small:.2e}') # 1.00e-05
Спецификации форматирования
# Формат: {значение:спецификация}
# {value:[[fill]align][sign][#][0][width][grouping_option][.precision][type]}
# Примеры
num = 42.789
# align: <, >, ^, =
print(f'{num:<10}') # Влево
print(f'{num:>10}') # Вправо
print(f'{num:^10}') # Центр
# sign: +, -, пробел
print(f'{num:+}') # +42.789
print(f'{-num:+}') # -42.789
# width: минимальная ширина
print(f'{num:10}') # Ширина 10 символов
# precision: количество знаков
print(f'{num:.2}') # 42 (две значащие цифры)
print(f'{num:.2f}') # 42.79 (два знака после запятой)
# type: d (int), f (float), s (str), x (hex), b (binary)
print(f'{42:d}') # 42
print(f'{42:x}') # 2a (шестнадцатеричная)
print(f'{42:b}') # 101010 (двоичная)
print(f'{3.14:f}') # 3.140000
Работа с датами
from datetime import datetime
now = datetime.now()
print(f'Дата и время: {now}') # 2025-02-15 14:30:45.123456
# Форматирование даты
print(f'Дата: {now:%d.%m.%Y}') # 15.02.2025
print(f'Время: {now:%H:%M:%S}') # 14:30:45
print(f'День недели: {now:%A}') # Saturday
print(f'Полная дата: {now:%c}') # Sat Feb 15 14:30:45 2025
Отладочные f-строки (Python 3.8+)
# = в f-строке выводит имя переменной и значение
x = 42
y = 3.14
z = 'hello'
print(f'{x=}') # x=42
print(f'{y=:.2f}') # y=3.14
print(f'{z=}') # z='hello'
print(f'{x + y=}') # x + y=45.14
# Полезно для отладки
def calculate(a, b):
result = a * b
print(f'{a=}, {b=}, {result=}') # a=10, b=5, result=50
return result
calculate(10, 5)
Вложенные f-строки
# f-строка внутри f-строки
width = 10
num = 42
print(f'{num:{width}d}') # Число шириной 10 символов
# С форматированием
precision = 2
price = 123.456
print(f'{price:.{precision}f}') # 123.46
# Сложнее: динамическая ширина
name = 'Алиса'
width = 15
print(f'{name:>{width}}') # Выравнивание по ширине
Мультистроковые f-строки
# Тройные кавычки для многострочных строк
name = 'Алиса'
age = 25
city = 'Москва'
profile = f'''
Профиль пользователя:
Имя: {name}
Возраст: {age}
Город: {city}
'''
print(profile)
Производительность
import timeit
# f-строка (самая быстрая)
time_f = timeit.timeit(lambda: f'Hello {"world"}', number=1000000)
# .format() (медленнее)
time_format = timeit.timeit(lambda: 'Hello {}'.format('world'), number=1000000)
# % (самая медленная)
time_percent = timeit.timeit(lambda: 'Hello %s' % 'world', number=1000000)
print(f'f-строка: {time_f:.3f}сек')
print(f'.format(): {time_format:.3f}сек')
print(f'%: {time_percent:.3f}сек')
# Результат: f-строка примерно в 2 раза быстрее .format()
Частые ошибки
❌ Забыл f перед строкой:
name = 'Алиса'
print('Имя: {name}') # Вывод: Имя: {name} (неправильно)
print(f'Имя: {name}') # Вывод: Имя: Алиса (правильно)
❌ Используешь одинарные кавычки внутри:
# Неправильно
data = {'key': 'value'}
print(f'{data['key']'}) # SyntaxError
# Правильно
print(f"{data['key']}") # Используй двойные кавычки снаружи
print(f'{data["key"]}')
❌ Пытаешься использовать backslash:
# Неправильно
print(f'Line 1\nLine 2: {name}') # Может не сработать
# Правильно
newline = '\n'
print(f'Line 1{newline}Line 2: {name}')
Best Practices
✅ ИСПОЛЬЗУЙ f-строки для:
- Форматирования строк
- Вывода отладочной информации
- Создания динамических SQL запросов (хотя будь осторожен с SQL инъекциями)
- Форматирования чисел, дат, денег
❌ НЕ ИСПОЛЬЗУЙ f-строки для:
- SQL запросов с пользовательским вводом (используй параметризованные запросы)
- Секретных данных в логах
- Совет: используй logging с маскированием
# f-строка отлично подходит для логирования
import logging
username = 'alice'
action = 'login'
logging.info(f'User {username} performed {action}')
f-строки — это современный стандарт форматирования в Python. Они читаемы, быстры и гибки. Используй их везде, где можно!