Строки в Python

Строкой является любой фрагмент текста. Python не различает строку, которая является одиночным символом или большим блоком текста. Из-за множества способов, которые Python предоставляет для работы со строками, это идеальный язык для обработки текста.

Название «строка», вероятно, связано с тем, что языки программирования часто трактуют текст как последовательность символов, «набранных» вместе.

Python имеет два разных типа строк.

Базовый тип строки (обычные строки) сохраняет текст как последовательность байтов (чисел) с одним байтом на символ. Они должны использоваться только в том случае, если вы знаете, что в вашем тексте будут только значения ASCII. Они очень удобны в использовании, поэтому многие программы просто используют этот тип строки. Их также можно использовать для хранения двоичных данных. Они иногда называются байтовыми строками, что является довольно хорошим описанием того, что они делают.

Строки в Unicode хранят текст внутренне, используя стандарт unicode. Они немного сложнее, потому что вы должны знать «кодировку», в которой текст хранится всякий раз, когда вы читаете текст или сохраняете его. В конечном счете это может сэкономить много времени и избежать путаницы.

Ниже представлен обзор двух разных типов строк и их включение в ваши программы.

Обычные строки

Вы включаете строку в свою программу, окружая ее одинарными кавычками или двойными кавычками:

X = ‘Это строка’
Y = “И это так”.

Если вы хотите включить строку в свой код («строковый литерал»), в котором есть разрывы строк, вы можете использовать тройные кавычки. Кавычки могут быть одинарные или двойные.

x = """This string
 goes over multiple lines.
 So it includes line breaks."""
 
 y = '''This string uses single quotes.
 But it is still multi-line.
 As you might have guessed.'''

Если вам нужно включить в строку специальные символы (например, разрывы строк или кавычки), то вы можете использовать экранированные символы. Python следует соглашению Unix об использовании обратной косой черты в качестве символа экранирования. Например:

# The variable x is a string which contains
 # a single line break
 x = '\n'
 
 # The variable y has an escaped quote character
 # To include the quote in the string (instead of
 # it terminating the string)
 y = 'Don\'t worry about quotes'
 
 # z is a single character - a backslash which has to be escaped
 # with another backslash
 z = '\'

Если вы хотите включить в свои строки обратные косые черты, не избегая их, вы можете использовать «сырую строку». Если вы начинаете строковой литерал в коде с помощью r, это необработанная строка.

Поскольку сырые строки предназначены для использования в регулярных выражениях, а не для указания путей к файлам Windows, они не могут заканчиваться обратным слэшем.

raw_string = r'a raw string may contain unescaped \s in it'

Обратная косая черта будет интерпретирована как экранирование сопровождающей ее кавычки, а также ее включение в строку. Раздражающий и не очень полезный, но у каждого бывают свои недостатки.

Строки Python хранятся с использованием чисел. Они не кодируются с использованием какой-либо кодировки. Интерпретатор просто получает то, что вы ему даете, и сохраняет его в виде последовательности байтов. По этой причине базовые строки часто упоминаются как «байтовые строки». Вы также можете использовать их для хранения двоичных данных.

Поскольку они хранятся в байтах, строковые литералы (в вашей программе) должны содержать только символы ASCII. Вы можете включить не-ASCII, объявив кодировку в начале вашей программы, но вы должны делать это только если знаете, что делаете.

Если вы намереваетесь использовать (или разрешать пользователям использовать) символы не-ASCII в вашей программе, то сохранение строк без указания кодировки вызывает проблемы. Если вы не будете очень осторожны, вы, вероятно, неправильно обработаете текст и исказите ваши данные. Гораздо лучше использовать строки unicode, которые кратко описаны ниже.

Строки Unicode

Как упоминалось выше, «обычные строки» в Python являются байтовыми строками и хранят данные в виде последовательности чисел. Это может быть очень удобно для текста ASCII, но как только вы используете символы, отличные от ASCII, то возникают соответствующие проблемы.

Для хорошего «руководства» по использованию Unicode с Python читайте A Crash Course в кодировках символов.

Строки в Unicode имеют внутреннее представление, которое сохраняет текст как текст. Фактически, компьютер знает, какие символы сравнивает ваш текст. Вам все равно придется выбирать кодировку, когда вы читаете или записываете свои данные.

Вы можете включить литералы unicode в свою программу, указав строку u. Если вы не укажете кодировку в начале вашей программы, вам все равно придется использовать только символы ASCII, но вы знаете, что ваша строка будет храниться как unicode, а не как строка байтов.

Правила цитирования и экранирования для строк в Юникоде такие же, как для строк байтов:

x = u'A unicode string'
 
 y = u'''A multi-line unicode
 string.'''
 
 y = ru"""This is a
 raw, multi-line
 unicode string !!!
 """

Вы можете принудить интерпретатор Python к конвертированию между unicode и byte-strings без указания явной кодировки, но скорее всего это повлечет за собой крах системы. Это может произойти, когда одна из строк, которую вы “неявно” преобразуете, (например, добавив строку юникода в строку байтов) имеет символы, которые не могут быть представлены в кодировке системы по умолчанию (которая обычно будет ASCII).\

В строках Python, как и в других встроенных типах, есть много полезных методов для работы со строковыми типами. Полный список приведен в строковых методах документов Python.

Другие полезные значения

Есть еще несколько полезных значений, которые могут пригодиться.

None: часто записываемый как null в других языках, обычно используется для представления «ничего».
True:   логическое  значение истина.
False:  логическое  значение ложь.

Можно включить эти значения  включить  в свою программу, написав  буквально:

x = None
y = True
z = None
Поделитесь с друзьями:

Оставьте комментарий