2.4. Строки

Строка – это последовательность символов Unicode, записанная в кавычках. Одинарные и двойные кавычки равнозначны – выбирайте тот стиль, который позволяет избежать экранирования кавычек, встречающихся внутри текста:

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

Строки в тройных кавычках ("""...""" или '''...''') занимают несколько строк и сохраняют переводы строк буквально:

banner = """boot ok
firmware v1.28
"""
print(banner)

Вывод:

boot ok
firmware v1.28

2.4.1. Управляющие последовательности

Внутри обычной строки \ вводит специальный символ:

  • \n – перевод строки

  • \t – табуляция

  • \\ – буквальный обратный слеш

  • \' / \" – буквальная кавычка (когда иначе она завершила бы строку)

  • \xHH – символ с шестнадцатеричным кодом HH

  • \uHHHH – кодовая точка Unicode HHHH

Когда строка содержит много обратных слешей, добавьте перед литералом префикс r, чтобы сделать её сырой (raw) строкой. Тогда обратные слеши воспринимаются буквально – \n остаётся последовательностью из двух символов вместо замены на перевод строки:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. Конкатенация и повторение

Две строки объединяются с помощью +; строка повторяется с помощью *:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

Повторное использование + в цикле выделяет новую строку на каждой итерации. Для построения больших строк из множества частей используйте str.join().

2.4.3. Длина, индексация и срезы

len() возвращает количество символов в строке. Индексация с помощью [] возвращает односимвольную строку в заданной позиции; отрицательные индексы отсчитываются от конца:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

Срез s[start:stop] возвращает подстроку от позиции start до stop, не включая её. Любой из концов можно опустить, чтобы обозначить «начало» или «конец», а необязательное третье значение s[start:stop:step] позволяет пропускать символы.

Строка "OpenMV" с метками позиций между каждым символом, иллюстрирующая, как срез выбирает символы между двумя позициями.

Позиции среза находятся между символами. s[2:5] выбирает символы в позициях 2, 3 и 4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

Срез, выходящий за границы, молча возвращает ту часть, которая существует – s[100:200] – это пустая строка "", а не ошибка. Индексация за границами, напротив, вызывает IndexError.

2.4.4. Неизменяемость

Строки нельзя изменять на месте. Операции, которые выглядят как изменение строки, на самом деле возвращают новую строку и оставляют исходную нетронутой:

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

Чтобы «изменить» строку, привяжите имя заново к новому значению: name = name.upper().