Строки

Строка (тип str) - упорядоченная последовательность символов, используемая для хранения текстовой информации и произвольной совокупности байтов. Строго говоря, строки представляют собой последовательности односимвольных строк.

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

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

В Python строки относятся к категории неизменяемых последовательностей, а это значит, что содержащиеся в них символы имеют позиционный порядок слева направо и не могут быть модифицированы на месте.

Строковые литералы

Литерал - запись в исходном коде компьютерной программы, представляющая фиксированное значение. Литералы представляют собой константы, включаемые непосредственно в текст программы. В отличие от прочих элементов языка, литералы не могут быть изменены в тексте программы.

В Python существует много способов записи строк в коде:

  • одинарные кавычки - 'eat at joe"s';

  • двойные кавычки - "eat at joe's";

  • утроенные кавычки - """ eat at joe's """", ''' eat at joe's ''';

  • управляющие последовательности - "j\n\o\a\e";

  • неформатированные строки - r"C:\temp\text.txt";

  • байтовый литерал - b'j\n\o\a\e'.

Строки в одинарных и двойных кавычках

Среди строк символы одинарных и двойных кавычек взаимозаменяемы. То есть строковые литералы можно записывать заключенными либо в две одинарных, либо в две двойных кавычки - две формы работают одинаково и возвращают объект того же самого типа. Например, две следующие строки идентичны

s1 = "text"
s2 = 'text'

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

s1 = "joe's"
s2 = 'joe"s'

Обратите внимание, что Python выполнит автоматическую конкатенацию соседних строк в любом выражении (автоматическая конкатенация аналогична операции +)

>>> "eat " "at " "joe's"
"eat at joe's"

Добавление запятых между этими строками привело бы к созданию кортежа, а не строки (автоматическое создание кортежа справедливо и для других типов данных)

>>> "eat ", "at ", "joe's"
('eat ', 'at ', "joe's")

Управляющие последовательности

Управляющие последовательности (escape sequences) позволяют внедрять в строки символы, которые не могут быть легко набраны на клавиатуре. Символ \ и один или более следующих за ним символов в строковом литерале в итоговой строке заменяются одиночным символом, который имеет двоичное значение, указанное управляющей последовательностью.

Разберем следующий пример

>>> s = "j\no\te"
>>> print(s)
j
o       e

Два символа \n обозначают одиночный символ - символ новой строки в таблице символов. Последовательность \t заменяется символом табуляции.

Примечательно, что если получить длину строки с помощью функции len(), то она вернет нам фактическую длину строки, независимо от того, каким образом они кодируются или отображаются

>>> len(s)
5

В нашем случае строка имеет длину 5 символов - "joe" + 1 символ переноса строки + 1 символ табуляции. Исходные символы обратной косой черты в предыдущем результате не хранятся со строкой в памяти; они используются лишь для описания значений специальных символов.

Последовательность

Описание

\

продолжение строки в многострочном литерале

\\

обратная косая черта (символ \)

\'

одинарная кавычка (')

\"

двойные кавычки (")

\a

звуковой сигнал

\b

backspace

\f

новая страница (formfeed)

\n

новая строка

\r

возврат каретки

\t

горизонтальная табуляция

\v

вертикальная табуляция

Форматирование строк

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

Форматирование строк в Python 3 может осуществляться двумя способами. Первый метод основан на использовании функции format(). Эта функция объединяет форматную строку, содержащую поля-заменители в фигурных скобках {}, со значениями, взятыми из параметров функции format(). Если потребуется включить в строку литерал { или }, удвойте его ({{ и }} соответственно).

print("Данная строка будет выведена без проблем {}")
print("Привет, {}! Фигурные скобки {{ }}".format("Вася"))

Данная строка будет выведена без проблем {}
Привет, Вася! Фигурные скобки { }

Функция format() предоставляет мощный мини-язык форматирования строк, дающий почти бесконечные возможности для управления форматированием строк. С другой стороны, в большинстве стандартных ситуаций он достаточно прост в использовании, поэтом в этом разделе будут рассмотрены некоторые шаблоны. Если же вам потребуются нетривиальные возможности, обращайтесь к разделу, посвященному форматированию строк, в документации стандартной библиотеки.

Функция format() и позиционные параметры

Простой способ использования строкой функции format() связан с заменой нумерованных полей, соответствующих параметрам, переданным функции format()

print("Привет, {0}, {1} и {2}!".format("Петя", "Саша", "Сережа"))
print("Порядок нумерованных полей может быть разным, {2}, {0} и {1}!".format("Петя", "Саша", "Сережа"))

Привет, Петя, Саша и Сережа!
Порядок нумерованных полей может быть разным, Сережа, Петя и Саша!

Пример выше содержим три поля-заменителя - {0}, {1} и {2}, - которые последовательно заменяются первым, вторым и третьим параметрами. Где бы в форматной строке ни размещалось поле {0}, оно всегда замещается первым параметром и так далее.

Именованные параметры

Метод format() также распознает именованные параметры и поля замены

В этом случае параметр выбирается по совпадению имени поля-заменителя с именем параметра, переданного команде format().

Допускается использование позиционных параметров вместе с именованными; в этих параметрах можно даже обращаться к атрибутам и элементам

В данном случае первый параметр является позиционным, тогда как обозначение user[1] относится ко второму элементу именованного параметра user.

Спецификаторы формата

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

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

Строковая интерполяция

В Python 3.6 появился механизм создания строковых констант, содержащих произвольные значения; он называется строковой интерполяцией. Строковая интерполяция позволяет включать значения выражений Python в строковые литералы. Эти f-строки (как они часто называются из-за префикса f) используют синтаксис, сходный с синтаксисом метода format(), но с несколько большей эффективностью. Приведем несколько примеров

Как и в случае с методом format(), можно добавить спецификаторы формата

Так как строковая интерполяция появилась в Python совсем недавно, пока неясно, как она будет использоваться.

Last updated