Символьный тип данных питон

2.5. Символы и строки¶

До сих пор наши программы работали только с числами. Но многим программам надо работать с текстовыми данными. Для этого есть два основных объекта — символы и строки.

2.5.1. Символьный тип данных¶

В питоне, чтобы сохранить символ в переменной, надо просто написать

и т.п. В итоге в переменной ch1 хранится символ a , а в ch2 — символ $ .

Вводить символы можно обычной командой input() :

(именно прямо так), выводить — обычным print :

(На самом деле, в питоне нет отдельного «типа» для символов, символ в питоне — это просто строка длины 1, про строки см. ниже. Но часто удобно думать про символы отдельно от строк.)

2.5.2. Коды символов¶

На самом деле, конечно, в памяти компьютера хранятся не символы (т.е. если мы написали ch=»$» , то нигде в памяти не будет нарисован доллар). Компьютер умеет работать только с числами, и вместо символов он хранит тоже числа.

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

Эта общепринятая сейчас кодировка для латинских букв, цифр и частоупотребимых символов называется ASCII, иногда говорят таблица ASCII. Основная часть этой таблицы выглядит так:

Источник

Читайте также:  Php not empty get

Символы в языке Python

Тип char – это тип данных, служащий для хранения одиночных символов в различных кодировках.

Он широко используется в более низкоуровневых языках программирования, таких как C. Даже строки там являются массивами, состоящими из элементов типа char.

В Python нет отдельного типа для символов. Даже если присвоить переменной значение ‘а’, она будет иметь строковый тип.

Альтернатива char в Python 3

Разработчики языка решили, что нет необходимости выделять под отдельные символы целый тип. На то есть несколько причин:

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

Поэтому как бы программист ни пытался, переменные будут иметь строковый тип:

s = ‘Hello’ s = s[0] # Присваиваем переменной элемент ‘H’ print(type(s))

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

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

s = 'О' s[0] = 'А' # Исключение TypeError

Функции

Несмотря на объединение двух типов, язык программирования Python 3 имеет функции для работы именно с символами.

Каждый элемент строки — закодированная последовательность битов. В Python символы могут быть представлены в виде целого числа int. Для работы с их обычным и числовым представлением используют встроенные функции ord() и chr() .

ord()

Функция возвращает числовое представление символа, переданного в качестве аргумента. То есть с её помощью в Python можно определить код символа (аналогичная функция есть и в C для приведения char к int), например:

Читайте также:  Casting primitive types java

Функция работает, только если в качестве аргумента передан один символ, при попытке передать строку возбудится исключение TypeError. С её помощью можно получить числовое представление любого символа кодировки Юникод.

chr()

Функция возвращает символ, соответствующий его числовому представлению, которое передается в качестве аргумента:

В качестве аргумента можно передать любое целое неотрицательное число вплоть до 1114111. В противном случае возбудится исключение ValueError.

Экранирование

Экранированные символы — это специальные символы после обратной косой черты «\», выполняющие определенные действия и преобразования.

Экранированная последовательность Функция
\n Переход на новую строку
\t Табуляция
\r Возврат каретки в начало строки
\x Числа в шестнадцатеричном представлении
\o Числа в восьмеричном представлении
\0 Нулевой символ
\’ Апостроф
Двойная кавычка
\\ Обратный слэш

Экранированные символы также называются escape-последовательностями, с их помощью можно, например, форматировать строки —

s = "Привет,\n\"Сергей\"" print(s) #Выведет: Привет, "Сергей"

Подавление экранирования

Иногда программисту нужно, чтобы обратный слеш не превращал элементы в escape-последовательности, например, при работе с путями к файлам. Для этого необходимо использовать сразу две косых черты: «C:\\Users\\Public».

Когда программист хочет использовать обратный слеш для вывода, но не подавляет экранирование, в некоторых случаях даже возбуждается исключение. В следующем примере есть синтаксическая ошибка из-за того, что с «\U» начинается записть 32-битного символа Юникода (с «\u» — 16-битного). После него должна быть последовательность из 8 цифр, поэтому возникла ошибка:

s = "C:\Users\Public" SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

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

s = r"C:\Users\Public" print(s) C:\Users\Public

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

>>> s = r"C:\Users\Public" >>> s 'C:\\Users\\Public'

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

Читайте также:  Правила создания страниц html

Решить эту проблему можно несколькими способами:

  • Дублировать символы экранирования вручную.
  • Использовать конкатенацию: s = r»Привет,\nмир» + «\\» .

Источник

Оцените статью