На этом шаге мы приведем общие сведения о строках и двоичных данных.
Строки представляют собой упорядоченные последовательности символов. Длина строки ограничена лишь объемом оперативной памяти компьютера. Как и все последовательности, строки поддерживают обращение к элементу по индексу, получение среза, конкатенацию (оператор +), повторение (оператор *), проверку на вхождение (операторы in и not in).
Кроме того, строки относятся к неизменяемым типам данных. Поэтому практически все строковые методы в качестве значения возвращают новую строку. При использовании небольших строк это не приводит к каким-либо проблемам, но при работе с большими строками можно столкнуться с проблемой нехватки памяти. Иными словами, можно получить символ по индексу, но изменить его будет нельзя:
>>> s = "Python" >>> s[0] # Можно получить символ по индексу 'P' >>> s[0] = "J" # Изменить строку нельзя Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> s[0] = "J" # Изменить строку нельзя TypeError: 'str' object does not support item assignment
В некоторых языках программирования концом строки является нулевой символ. В языке Python нулевой символ может быть расположен внутри строки:
>>> 'string\x00string' # Нулевой символ - это НЕ конец строки 'string\x00string'
Язык Python 3 поддерживает следующие строковые типы:
>>> type('строка') <class 'str'> >>> 'строка'.encode(encoding='cp1251') b'\xf1\xf2\xf0\xee\xea\xe0' >>> 'строка'.encode(encoding='utf-8') b'\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0'
>>> s = bytes("стр str", "cp1251") >>> s[0], s[5], s[0:3], s[4:7] (241, 116, b'\xf1\xf2\xf0', b'str') >>> s b'\xf1\xf2\xf0 str'
Объект типа bytes может содержать как однобайтовые, так и многобайтовые символы. Обратите внимание на то, что функции и методы строк некорректно работают с многобайтовыми кодировками, - например, функция len() вернет количество байтов, а не символов:
>>> len("строка") 6 >>> len(bytes("строка", "cp1251")) 6 >>> len(bytes("строка", "utf-8")) 12
>>> s = bytearray("str", "cp1251") >>> s[0] = 49; s # Можно изменить символ bytearray(b'1tr') >>> s.append(55); s # Можно добавить символ bytearray(b'1tr7')
Во всех случаях, когда речь идет о текстовых данных, следует использовать тип str. Именно этот тип мы будем называть словом "строка". Типы bytes и bytearray следует задействововать для записи бинарных данных - например, изображений, а также для промежуточного хранения текстовых данных. Более подробно типы bytes и bytearray мы рассмотрим позднее.
На следующем шаге мы рассмотрим создание строки.