Типы кавычек в Python и их применение

Раздел: Основы Python -> Строки в Python

Кавычки в Python: основные правила

В Python для создания строк используются одинарные ('), двойные (") и тройные (''' или """) кавычки. Различий между одинарными и двойными кавычками нет - они взаимозаменяемы. Основное правило: следует выбирать такой тип кавычек, который упрощает чтение кода и уменьшает необходимость экранирования.

Основной подход: выбор кавычек по содержимому строки

Чтобы избежать лишнего экранирования, можно использовать одинарные кавычки для строк, содержащих двойные кавычки, и наоборот. Если строка содержит оба типа, можно использовать тройные кавычки или экранировать символы.

# Строка с двойными кавычками внутри - используем одинарные
s1 = 'Он сказал: "Привет!"'
print(s1)

# Строка с одинарными кавычками внутри - используем двойные
s2 = 'Сегодня хороший день'
print(s2)

# Строка содержит и одинарные, и двойные кавычки - тройные
s3 = '''Он воскликнул: "It's amazing!"'''
print(s3)

Python кавычки (кавычки в python)

Он сказал: "Привет!"
Сегодня хороший день
Он воскликнул: "It's amazing!"

Как создать строку, содержащую апостроф (одинарную кавычку)?

Если строка содержит одинарную кавычку, можно использовать экранирование или двойные кавычки снаружи. Рекомендуется экранирование:

text = 'Python\'s syntax is clear'
print(text)
Python's syntax is clear

Как создать строку, содержащую двойные кавычки?

Используйте одинарные кавычки для ограничения строки:

quote = 'Он сказал: "Hello!"'
print(quote)
Он сказал: "Hello!"

Как записать многострочную строку?

Для многострочных строк применяются тройные кавычки (одинарные или двойные):

poem = '''В лесу родилась ёлочка,
В лесу она росла.
Зимой и летом стройная,
Зелёная была.'''
print(poem)
В лесу родилась ёлочка,
В лесу она росла.
Зимой и летом стройная,
Зелёная была.

Как поступить, если строка содержит и одинарные, и двойные кавычки?

Вы можете использовать тройные кавычки или экранировать один из типов. Тройные кавычки читаются лучше:

mixed = '''Он крикнул: "Don't go there!" '''
print(mixed)
Он крикнул: "Don't go there!" 

Типичные ошибки при работе с кавычками

  • Непарные кавычки: если открывающая и закрывающая кавычки разного типа, возникает SyntaxError. Например, s = 'Hello" вызовет ошибку.
  • Пропуск экранирования: внутри строки, ограниченной одинарными кавычками, нельзя использовать одинарную кавычку без обратной косой черты. Аналогично для двойных. Это приводит к преждевременному закрытию строки.
  • Путаница с тройными кавычками: тройные кавычки должны быть однотипны (три одинарные или три двойные). Комбинация, например '''", не сработает.
  • Проблемы с отступами: в многострочных строках сохраняются все пробелы и переносы строк. Это может нарушить форматирование вывода.

Решение: Следует всегда проверять парность кавычек, использовать экранирование только при необходимости, а для сложных строк выбирать тройные кавычки. Для удаления лишних пробелов можно применять метод textwrap.dedent или следить за отступами в коде.

Raw-строки и кавычки

Raw-строки (префикс r) игнорируют escape-последовательности, но кавычки всё равно нужно правильно закрывать.

Пример
path = r'C:/Users/Name/Documents'
print(path)

# raw-строка с двойными кавычками
path2 = r'C:/Program Files/App'
print(path2)

# raw-строка с тройными кавычками для многострочности
text = r'''Первая строка\nВторая строка'''
print(text)
C:/Users/Name/Documents
C:/Program Files/App
Первая строка\nВторая строка

Стоит обратить внимание: в последнем примере \n не интерпретируется как перевод строки, а выводится буквально.

F-строки и кавычки

В f-строках нужно аккуратно сочетать кавычки для внешней строки и для выражений внутри.

Пример
name = "Анна"
age = 25

# Использование одинарных кавычек снаружи, двойных внутри выражения
msg = f'{name} сказала: "Мне {age} лет"'
print(msg)

# Или наоборот
msg2 = f'{name} сказала: "Мне {age} лет"'
print(msg2)

# Если выражение содержит кавычки, можно использовать тройные кавычки для f-строки
msg3 = f'''Она сказала: "Мне {age} лет" и добавила: "Это правда"'''
print(msg3)
Анна сказала: "Мне 25 лет"
Анна сказала: "Мне 25 лет"
Она сказала: "Мне 25 лет" и добавила: "Это правда"

Docstrings и документация

Тройные кавычки традиционно используются для многострочных комментариев (docstrings) внутри функций, классов и модулей.

Пример
def greet(name):
    '''Приветствие пользователя.

    Аргументы:
        name (str): Имя пользователя.
    Возвращает:
        str: Приветственное сообщение.
    '''
    return f"Привет, {name}!"

print(greet.__doc__)
Приветствие пользователя.

    Аргументы:
        name (str): Имя пользователя.
    Возвращает:
        str: Приветственное сообщение.
    

Экранирование кавычек и обратной косой черты

Внутри строки можно использовать обратную косую черту для экранирования кавычек, но это ухудшает читаемость.

Пример
# Экранирование одинарной кавычки внутри строки в одинарных кавычках
s = 'It\'s a test'
print(s)
It's a test

Комбинирование типов кавычек в одном выражении

Иногда требуется в одном выражении использовать несколько типов кавычек, например, при конкатенации или форматировании строк.

Пример
part1 = 'двойные'
part2 = 'одинарные'
result = 'Строка с ' + part1 + ' и ' + part2 + ' кавычками.'
print(result)

# Форматирование с помощью % и format
template = 'Кавычки: %s и %s' % (part1, part2)
print(template)

template2 = 'Кавычки: {} и {}'.format(part1, part2)
print(template2)
Строка с двойные и одинарные кавычками.
Кавычки: двойные и одинарные
Кавычки: двойные и одинарные

Использование repr() для отображения кавычек

Функция repr() возвращает строковое представление объекта, которое включает кавычки и escape-последовательности.

Пример
original = 'Hello, "World"!'
print(repr(original))

# Видно, что repr добавляет внешние одинарные кавычки и экранирует внутренние
print(original)
'Hello, "World"!'
Hello, "World"!

Кавычки в строковых литералах с Unicode

Строки могут содержать любые символы Unicode. Кавычки выбираются по тем же правилам.

Пример
chinese = '你好, "世界"'
print(chinese)

# Использование тройных кавычек с эмодзи
emoji = '''? ? ?'''
print(emoji)
你好, "世界"
? ? ?

Кавычки в Python - comments

En
Python кавычки (python)