Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[5]

усмотрению решать, когда и какие кавычки использовать.

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

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

Переход на новую строчку можно включать в строки так же, как мы это делали для оператора print: как \п. Но есть ещё один способ включить переход на новую строчку в явном виде. Для этого есть еще два варианта заключения в кавычки. Нет, это не широко известные обратные, до которых мы всё ещё не дошли, а особые, существующие только в питоне: тройные. Они бывают двух типов: тройные двойные и тройные одинарные (тройные одинарные были введены сугубо ради симметрии и почти не используются). Выглядят они так:

g="""Строка,

иявнымиобразом

разбитаяина

строчки"""

Ну и, наконец, перейдем к обратным кавычкам, потому как это последний их тип. п=53 k=h(

Что после этого находится в к? Строка, конечно. А что в строке? Значение переменной п, то есть "53". Итак, обратные кавычки возвращают преобразованное в строку значение переменной, имя которой записано между ними. Другой, менее экзотичный способ совершения того же действия выглядит так:

k=repr(h)

Согласитесь, длиннее, труднее для запоминания и менее красиво. Другая от частого употребления ставшая стандартной операция со строками - это взятие её длины:

l=len(k)

Упражнение. Попробуйте угадать, что будет в m, п и р после выполнения следующего:

m,n=3.1415,......\\\\\\\"\"и ии ии

р=1еп(n+m+n+т)

Правильный ответ: 3.1415, \\\""ии 43 соответственно.


Лекция пятая

Разобравшись с кавычками, мы можем перейти к скобкам. Их существует четыре вида: круглые, квадратные, фигурные и угловые. Три из них служат для определения трех важнейших сложных типов данных питона.

3.9 Композитные типы данных

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

Определение. Последовательность есть нечто, заключенное в скобки.

1. Кортеж есть неоднородный неизменяемый массив. Задается круглыми скобками или же их отсутствием. Ну, неоднородный - это понятно, значит, может содержать разнотиповые данные, например:

А=(2,3.14,"ааа")

В=((((((1),0),0),0),0),0)

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

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

В этом случае в С будет занесена не двойка, а 3.14, потому что нумерация элементов всегда идет с нуля. Также можно из кортежа взять часть с несколькими элементами, называемую сечением. Сечения бывают трех видов: начальные, центральные и конечные. Рассмотрим различия между ними на примерах:

D=(i,2,3,4,5,6,7,8,9) даёт (1,2,3,4,5,6,7,8,9)

E=D[3:8] даёт (4,5,6,7,8)

F=D[:4] даёт (1,2,3,4)

G=D[7:] даёт (8,9)

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


невключительно. Следует отметить, что это обычный для питона метод обхождения с границами чего бы то ни было - нижняя граница всегда входит в диапазон, а верхняя - нет. Это не обусловлено никакими теоретическими выкладками, а только практическим удобством использования. Ну и, конечно, ни на минуту нельзя забывать, что нумерация элементов идет с нуля! В третьей строчке мы опустили первое число, и оно по умолчанию приняло значение 0 - номер первого элемента, что дало нам начальное сечение. Ясно, что конечное сечение получается при опускании последнего индекса, принимающего номер на один больший номера последнего элемента (то есть так, чтобы последний элемент вошел в сечение, а не остался непонятно где).

У некоторых логично мыслящих может возникнуть вопрос: а что, если опустить оба числа? Правильный ответ таков: результатом будет полное сечение или копия исходного кортежа. Такой ответ ожидаем, но не вносит ясности, появления которой мы так жаждали при формулировке вопроса, и даже наоборот, он запутывает ситуацию, порождая новый вопрос: в чем разница между H=D и H=D [: ] ? Ответ: в семантике!

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

Количество имен объекта1 называется его мощностью. Для уменьшения мощности используется оператор del. Когда мощность объекта опускается до нуля, объект потерян, мы больше не имеем к нему доступа, и в ближайшее время он будет уничтожен интерпретатором питона. Все строки и числа имеют мощность 1 и уничтожаются сразу по вызову оператора del или при получении именем нового значения. Запись H=D[:] олицетворяет семантику копирования. Создаётся новый объект, полностью копирующий структуру и содержимое старого, и мы получаем два одинаковых (точнее, разных, но равных) объекта мощности 1 каждый.

Для преобразования строки или последовательности в кортеж используется функция tuple():

»> tuple(123) (1, 2,3)

Если аргумент этой функции - кортеж, она вернет именно его (а не его копию).

2. Список есть изменяемый неоднородный массив. Задается квадратными скобками.

1 Объектом мы пока что называем множество ячеек памяти



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13]