Встроенные объекты Python

 

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

 

Строки

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

Пример операций над строками:

> S # Строка из 4 символов
‘Spam’
>>> S[1:3] # Срез строки S начиная со смещения 1 и до 2 (не 3)
‘pa’

>> S[:3] # То же, что и S[0:3]
‘Spa’
>>> S[:-1] # Еще раз все, кроме последнего элемента, но проще (0:-1)
‘Spa’

>>> S
‘Spam’
>>> S + ‘xyz’ # Конкатенация
‘Spamxyz’
>>> S # S остается без изменений
‘Spam’
>>> S * 8 # Повторение
‘SpamSpamSpamSpamSpamSpamSpamSpam’

>>> S.find(‘pa’) # Поиск смещения подстроки
1
>>> S
‘Spam’
>>> S.replace(‘pa’, ‘XYZ’) # Замена одной подстроки другой
‘SXYZm’
>>> S
‘Spam’

Списки

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

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

>> L.append(‘NI’) # Увеличение: в конец списка добавляется новый объект
>>> L
[123, ‘spam’, 1.23, ‘NI’]
>>> L.pop(2) # Уменьшение: удаляется элемент из середины списка
1.23
>>> L # Инструкция “del L[2]” также удалит элемент списка
[123, ‘spam’, ‘NI’]

Так как списки являются изменяемыми, большинство методов списков не
создают новый список, а изменяют оригинальный список

>>> M = [‘bb’, ‘aa’, ‘cc’]
>>> M.sort()
>>> M
[‘aa’, ‘bb’, ‘cc’]
>>> M.reverse()
>>> M
[‘cc’, ‘bb’, ‘aa’]

Пример операций над списками

> L = [123, ‘spam’, 1.23] # Список из трех объектов разных типов
>>> len(L) # Число элементов в списке
3

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

>>> L[0] # Доступ к элементу списка по его индексу
123
>>> L[:-1] # Операция получения среза возвращает новый список
[123, ‘spam’]
>>> L + [4, 5, 6] # Операция конкатенации также возвращает новый список
[123, ‘spam’, 1.23, 4, 5, 6]

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

>> L
[123, ‘spam’, ‘NI’]
>>> L[99]
…текст сообщения об ошибке опущен…
IndexError: list index out of range

Генераторы списков следуют традиции системы представления множеств; они
позволяют создавать новые списки, выполняя выражение для каждого элемен-
та в последовательности, по одному за раз, слева направо. Генераторы списков
заключены в квадратные скобки (чтобы отразить тот факт, что они создают
список) и составлены из выражения и конструкции цикла, которые использу-
ют одно и то же имя переменной (в данном случае row). В предыдущем примере
генератор списков интерпретируется так: «Получить элементы row[1] из каж-
дой строки матрицы M и создать из них новый список». Результатом является
новый список, содержащий значения из второго столбца матрицы.
На практике генераторы списков могут приобретать еще более сложную фор-
му:

>>> [row[1] + 1 for row in M] # Добавить 1 к каждому элементу в столбце 2
[3, 6, 9]
>>> [row[1] for row in M if row[1] % 2 == 0] # отфильтровать нечетные значения
[2, 8]

Например, ниже показано использование генератора списков для обхода жестко заданного в программном коде списка координат и строк:

>> diag = [M[i][i] for i in [0, 1, 2]] # Выборка элементов диагонали матрицы
>>> diag
[1, 5, 9]
>>> doubles = [c * 2 for c in ‘spam’] # Дублирование символов в строке
>>> doubles
[‘ss’, ‘pp’, ‘aa’, ‘mm’]

Словари

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

Операции со списком:

>> D = {‘food’: ‘Spam’, ‘quantity’: 4, ‘color’: ‘pink’}

Обращение к элементу словаря:

>>> D[‘food’] # Получить значение, связанное с ключом ‘food’
‘Spam’

>>> D[‘quantity’] += 1 # Прибавить 1 к значению ключа ‘quantity’
>>> D
{‘food’: ‘Spam’, ‘color’: ‘pink’, ‘quantity’: 5}

Создание словарей:

> D = {}
>>> D[‘name’] = ‘Bob’ # В результате присваивания создается ключ
>>> D[‘job’] = ‘dev’
>>> D[‘age’] = 40
>>> D
{‘age’: 40, ‘job’: ‘dev’, ‘name’: ‘Bob’}
>>> print(D[‘name’])
Bob

Вложенные словари

>> rec = {‘name’: {‘first’: ‘Bob’, ‘last’: ‘Smith’},
‘job’: [‘dev’, ‘mgr’],
‘age’: 40.5}


rec[‘job’][-1] # Обращение к элементу вложенного списка
‘mgr’

Кортежи

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

Примеры операций с кортежами:

>>> T.index(4) # Методы кортежей: значение 4 находится в позиции 3
3
>>> T.count(4) # Значение 4 присутствует в единственном экземпляре

Основное отличие кортежей – это невозможность их изменения после создания. То есть кортежи являются неизменяемыми последовательностями:

>> T[0] = 2 # Кортежи являются неизменяемыми
…текст сообщения об ошибке опущен…
TypeError: ‘tuple’ object does not support item assignment

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

 

Файлы

Объекты-файлы – это основной интерфейс между программным кодом на языке Python и внешними файлами на компьютере. Файлы являются одним из базовых типов, но они представляют собой нечто необычное, поскольку для файлов отсутствует возможность создания объектов в виде литералов. Вместо этого, чтобы создать объект файла, необходимо вызвать встроенную функцию open, передав ей имя внешнего файла и строку режима доступа к файлу. Например, чтобы создать файл для вывода данных, вместе с именем файла функции необходимо передать строку режима ‘w’:

>> f = open(‘data.txt’, ‘w’) # Создается новый файл для вывода
>>> f.write(‘Hello\n’) # Запись строки байтов в файл
6
>>> f.write(‘world\n’) # В Python 3.0 возвращает количество записанных байтов
6
>>> f.close() # Закрывает файл и выталкивает выходные буферы на диск
В

Файлы

Объекты-файлы – это основной интерфейс между программным кодом на язы-
ке Python и внешними файлами на компьютере. Файлы являются одним из
базовых типов, но они представляют собой нечто необычное, поскольку для
файлов отсутствует возможность создания объектов в виде литералов. Вместо
этого, чтобы создать объект файла, необходимо вызвать встроенную функцию
open, передав ей имя внешнего файла и строку режима доступа к файлу. На-
пример, чтобы создать файл для вывода данных, вместе с именем файла функ-
ции необходимо передать строку режима ‘w’:

Запись в файл

f = open(‘data.txt’, ‘w’) # Создается новый файл для вывода
>>> f.write(‘Hello\n’) # Запись строки байтов в файл
6
>>> f.write(‘world\n’) # В Python 3.0 возвращает количество записанных байтов
6
>>> f.close() # Закрывает файл и выталкивает выходные буферы на диск
В

Чтение файла

>> f = open(‘data.txt’) # ‘r’ – это режим доступа к файлу по умолчанию
>>> text = f.read() # Файл читается целиком в строку
>>> text
‘Hello\nworld\n’
>>> print(text) # Вывод, с попутной интерпретацией служебных символов
Hello
world

>> text.split() # Содержимое файла всегда является строкой
[‘Hello’, ‘world’]