Обозначение строковых значений в синтаксисе Python

Раздел: Основы Python -> Синтаксис 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 не работает экранирование и
слеши не интерпретируются

Обозначения в Python - comments

En
обозначение python (python)