Строка - это упорядоченная последовательность символов. Можно даже сказать, что строка - это массив символов, поскольку массив - это и есть упорядоченная последовательность.
Строки поддерживают обращение по индексу, конкатенацию ( + ), повторение(*), проверку на вхождение (in).
В Python строковые значения принято заключать в кавычки - двойные или одинарные. Компьютеру все равно, главное, чтобы использовался один и тот же тип открывающейся и закрывающейся кавычки, например:
рrint("Привет")
print ('Привет')
Эти операторы выведут одну и ту же строку. При желании можно, чтобы строка содержала кавычки обоих типов:
print ("Привет, 'мир' ! ")
Здесь внешние кавычки (двойные) используются для ограничения строкового значения, а внутренние выводятся как обычные символы. Внутри этой строки вы можете использовать сколько угодно одинарных кавычек.
Можно поступить и наоборот - для ограничения использовать одинарные кавычки, тогда внутри можно будет использовать сколько угодно двойных кавычек:
print ('Привет, "мир"!')
Использовав кавычки одного типа в роли ограничителей, вы уже не сможете пользоваться ими внутри строки. Это целесообразно, ведь второе по порядку вхождение открывающей кавычки компьютер считает концом строки.
Функции print() можно передать несколько значений, разделив их запятыми:
рrint("Привет",
"мир!")
Иногда такой прием используют, чтобы сделать код более читабельным.
Если вы внимательно читали предыдущие главы, то знаете, что строки являются неизменяемыми типами данных. Именно поэтому почти все строковые методы в качестве значения возвращают новую строку, а не изменяют существующую. С одной стороны, это хорошо - вам не нужно беспокоиться, что что-то пойдет не так. С другой, при работе с большими объемами данных можно столкнуться с нехваткой памяти.
Помните, что вы можете получить символ строки по индексу, но изменить строку, то есть изменить этот символ, как можно было в других языках программирования, нельзя:
>>> str = "Hello"
>>> str[l]
'е'
>>> str[l] = "r"
Traceback (most recent call last):
File "<pyshell#4", line 1, in <module
str[l] = "r"
TypeError: 'str' object does not support item assignment
>>>
Python поддерживает следующие строковые типы: str, bytes и bytearr. Первый тип - это обычная Unicode-cтpoкa. Символы хранятся в некоторой абстрактной кодировке, а при выводе вы можете указать нужную вам кодировку с помощью метода encode():
>>> s = "Привет"
>>> s.encode(encoding="utf-8")
b'\xd0\x9f\xdl\x80\xd0\xb8\xd0\xb2\xd0\xb5\xdl\x82'
>>> s.encode(encoding="cp1251")
b'\xcf\xf0\xe8\xe2\xe5\xf2'
Тип bytes - это неизменяемая последовательность байтов. Каждый элемент такой последовательности может хранить целое число от 0 до 255, обозначающее код символа. Этот тип поддерживает большинство строковых методов, однако при доступе по индексу возвращается целое число, а не символ:
>>> s = bytes("hello", "utf-8")
>>> s[0], s[l], s[2] (104, 101, 108)
>>> s
b'hello'
Некоторые строковые функции некорректно работают с типом bytes. Например, функция len() возвращает количество байтов, которые занимает строка в памяти, а не количество символов:
>>> len("hello")
5
>>> lеn(bуtеs("Привет", "utf-8"))
12
В кодировке UTF-8 для кодирования одного символа используется два байта, поэтому результат - 12, а не 6.
Тип bytearray - это изменяемая последовательность байтов. Данный тип аналогичен типу bytes, но вы можете изменять элементы такой строки по индексу. Также этот тип содержит дополнительные методы, которые позволяют добавлять и удалять элементы:
>>> s = bytearray("hello", "utf-8")
>>> s[0] = 50; s
bytearray(b'hello')