Обозначение строковых значений в синтаксисе Python
Обозначение строк в Python: выбор способа
Как эффективно вставлять переменные в строки без лишнего кода?
f-строки (f-strings) - современный метод форматирования, появившийся в Python 3.6. Позволяет прямо внутри строки использовать фигурные скобки с выражениями.
name = "Анна"
age = 30
print(f"Меня зовут {name}, мне {age} лет.")
Python несколько строк (многострочные конструкции и множественные элементы в python)
Меня зовут Анна, мне 30 лет.
обозначение python (обозначения в python)
Выражения в фигурных скобках могут содержать любые вычисления, вызовы функций и даже словари.
Типичная ошибка: забыть поставить префикс f перед кавычками. Тогда фигурные скобки будут восприниматься как обычный текст.
Решение: всегда проверять наличие f или F в начале строки.
Как объединить несколько строк с помощью конкатенации?
Старый способ - использование оператора +. Подходит для простых случаев, но становится громоздким при большом количестве переменных.
name = "Анна"
print("Привет, " + name + "!")
базовые конструкции языка python (основные конструкции языка python)
Привет, Анна!
Python подчеркивание (использование подчеркивания в python)
Проблема: нужно не забывать добавлять пробелы; при работе с числами необходима явная конвертация в строку.
Решение: использовать str() или перейти на f-строки.
Как форматировать строку с помощью метода .format()?
Метод str.format() появился в Python 3 и до появления f-строк был основным способом. Позволяет использовать позиционные и именованные аргументы.
name = "Анна"
age = 30
print("Меня зовут {}, мне {} лет.".format(name, age))
Python название переменной (правила именования в python)
Меня зовут Анна, мне 30 лет.
Python скобки (скобки в python)
Ошибка: несовпадение количества и порядка аргументов ведет к исключению или неверному выводу.
Решение: использовать именованные аргументы: "{n}".format(n=name)
Как использовать старый стиль форматирования с оператором %?
Оператор % заимствован из языка C. Требует указания типов формата (%s, %d и т.д.). Меньше возможностей, менее читаем.
name = "Анна"
age = 30
print("Меня зовут %s, мне %d лет." % (name, age))
Меня зовут Анна, мне 30 лет.
Типичная ошибка: неверный символ формата (например, %d для строки).
Решение: всегда проверять соответствие типа (%s для строк, %d для целых).
Как записать многострочный текст без использования конкатенации?
Для длинных строк подходят тройные кавычки """...""" или '''...'''. Они сохраняют переносы строк.
text = """Это первая строка.
Это вторая строка."""
print(text)
Это первая строка.
Это вторая строка.
Проблема: лишние отступы внутри тройных кавычек, если строка находится внутри блока с отступами.
Решение: использовать textwrap.dedent или выравнивать код без отступов.
Как избежать экранирования обратных слешей в строке?
Префикс r (raw string) отключает экранирование. Удобно для регулярных выражений и путей Windows.
path = r"C:\Users\Anna\Documents"
print(path)
C:\Users\Anna\Documents
Ошибка: raw строка не может заканчиваться обратным слешем, так как он экранирует закрывающую кавычку.
Решение: добавить обычную строку с обратным слешем в конце: r"C:\" недопустимо, лучше "C:\\".
Как создать последовательность байт, а не строку?
Префикс b (bytes) создает объект типа bytes, содержащий байты, а не символы Unicode. Используется при работе с бинарными данными.
data = b"Hello"
print(data)
print(type(data))
b'Hello'
<class 'bytes'>
Проблема: попытка использовать методы строк к байтам (например, .upper()) не сработает без декодирования.
Решение: всегда явно преобразовывать в строку: data.decode("utf-8").
Дополнительные примеры и тонкости
# f-строка с вызовом функции и математическим выражением
def greet(name):
return f"Здравствуйте, {name}!"
print(f"{greet('Иван')}, сегодня {2+5} градусов.")
Здравствуйте, Иван!, сегодня 7 градусов.
# f-строка с отображением словаря
person = {"name": "Мария", "age": 25}
print(f"{person['name']} (возраст {person['age']})")
Мария (возраст 25)
# многострочная f-строка (в Python 3.12+ можно использовать f"""...""")
name = "Петр"
address = "ул. Ленина"
print(f"""
Имя: {name}
Адрес: {address}
""")
Имя: Петр Адрес: ул. Ленина
# raw f-строка (комбинация r и f) - доступна с Python 3.12
import sys
if sys.version_info >= (3,12):
path = rf"C:\Users\{'Вася'}\Documents"
print(path)
else:
print("Raw f-строки требуют Python 3.12+")
C:\Users\Вася\Documents
# Форматирование чисел в f-строке
pi = 3.141592653589793
print(f"pi с двумя знаками: {pi:.2f}")
print(f"pi с 4 знаками: {pi:.4f}")
print(f"выравнивание: {pi:10.2f}")
pi с двумя знаками: 3.14 pi с 4 знаками: 3.1416 выравнивание: 3.14
# Метод .format() с именованными аргументами и доступом к атрибутам
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Ольга", 28)
print("{p.name} - {p.age} лет".format(p=p))
Ольга - 28 лет
# Использование format_map со словарём
data = {"x": 10, "y": 20}
print("Координаты: ({x}, {y})".format_map(data))
Координаты: (10, 20)
# Raw строка с регулярным выражением (избежание двойных слешей)
import re
pattern = r"\b\w{3}\b"
text = "cat dog elephant"
print(re.findall(pattern, text))
['cat', 'dog']
# Bytes строки и кодировка
data = b"\x48\x65\x6c\x6c\x6f"
print(data.decode("utf-8"))
try:
print(data.decode("ascii"))
except UnicodeDecodeError as e:
print(f"Ошибка: {e}")
Hello Ошика: 'ascii' codec can't decode byte ... (зависит от данных)
# Многострочная raw строка (тройные кавычки с r)
raw_multi = r"""Это строка
с \n не работает экранирование и
слеши не интерпретируются"""
print(raw_multi)
Это строка с \n не работает экранирование и слеши не интерпретируются