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– кодова точка 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().