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– кодовая точка UnicodeHHHH
Когда строка содержит много обратных слешей, добавьте перед литералом префикс 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] позволяет пропускать символы.
Позиции среза находятся между символами. 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().