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)

Output:

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] дозволяє пропускати символи.

The string "OpenMV" with position markers between each character, illustrating how a slice selects the characters between two positions.

Позиції зрізів розташовуються між символами. 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().