← Назад к вопросам

Что такое f строка?

2.0 Middle🔥 131 комментариев
#Python Core#Soft Skills

Комментарии (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. Они читаемы, быстры и гибки. Используй их везде, где можно!