Читаем Язык программирования Python полностью

Взятие элемента по индексу и срезы

Здесь же следует сказать несколько слов об индексировании последовательностей и выделении подстрок (и вообще — подпоследовательностей) по индексам. Для получения отдельного элемента последовательности используются квадратные скобки, в которых стоит выражение, дающее индекс. Индексы последовательностей в Python начинаются с нуля. Отрицательные индексы служат для отсчета элементов с конца последовательности (-1 — последний элемент). Пример проясняет дело:

Листинг

>>> s = [0, 1, 2, 3, 4]

>>> print s[0], s[-1], s[3]

0 4 3

>>> s[2] = -2

>>> print s

[0, 1, — 2, 3, 4]

>>> del s[2]

>>> print s

[0, 1, 3, 4]

Примечание:

Удалять элементы можно только из изменчивых последовательностей и желательно не делать этого внутри цикла по последовательности.

Несколько интереснее обстоят дела со срезами. Дело в том, что в Python при взятии среза последовательности принято нумеровать не элементы, а промежутки между ними. Поначалу это кажется необычным, тем не менее, очень удобно для указания произвольных срезов. Перед нулевым (по индексу) элементом последовательности промежуток имеет номер 0, после него — 1 и т.д.. Отрицательные значения отсчитывают промежутки с конца строки. Для записи срезов используется следующий синтаксис:

Листинг

последовательность[нач:кон:шаг]

где нач — промежуток начала среза, кон — конца среза, шаг — шаг. По умолчанию нач=0, кон=len(последовательность), шаг=1, если шаг не указан, второе двоеточие можно опустить.

А теперь пример работы со срезами:

Листинг

>>> s = range(10)

>>> s

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> s[0:3]

[0, 1, 2]

>>> s[-1:]

[9]

>>> s[::3]

[0, 3, 6, 9]

>>> s[0:0] = [-1, — 1, — 1]

>>> s

[-1, — 1, — 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> del s[:3]

>>> s

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

Тип dict

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

Листинг

d = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

d0 = {0: 'zero'}

print d[1] # берется значение по ключу

d[0] = 0 # присваивается значение по ключу

del d[0] # удаляется пара ключ–значение с данным ключом

print d

for key, val in d.items: # цикл по всему словарю

print key, val

for key in d.keys: # цикл по ключам словаря

print key, d[key]

for val in d.values: # цикл по значениям словаря

print val

d.update(d0) # пополняется словарь из другого

print len(d) # количество пар в словаре

Тип file

Объекты этого типа предназначены для работы с внешними данными. В простом случае — это файл на диске. Файловые объекты должны поддерживать основные методы: read, write, readline, readlines, seek, tell, close и т.п.

Следующий пример показывает копирование файла:

Листинг

f1 = open(«file1.txt», «r»)

f2 = open(«file2.txt», «w»)

for line in f1.readlines:

f2.write(line)

f2.close

f1.close

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

Листинг

import urllib

f1 = urllib.urlopen(«http://python.onego.ru»)

О модулях, классах, объектах и функциях будет говориться на других лекциях.

Выражения

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

Приоритет операций показан в нижеследующей таблице (в порядке уменьшения). Для унарных операций x обозначает операнд. Ассоциативность операций в Python — слева–направо, за исключением операции возведения в степень (**), которая ассоциативна справа налево.

Операция Название

lambda лямбда–выражение

or логическое ИЛИ

and логическое И

not x логическое НЕ

in, not in проверка принадлежности

is, is not проверка идентичности

<,<=,>,>=,!=,== сравнения

| побитовое ИЛИ

^ побитовое исключающее ИЛИ

& побитовое И

<<, >> побитовые сдвиги

+, — сложение и вычитание

*, /, % умножение, деление, остаток

+x, — x унарный плюс и смена знака

~x побитовое НЕ

** возведение в степень

x.атрибут ссылка на атрибут

x[индекс] взятие элемента по индексу

x[от:до] выделение среза (от и до)

f(аргумент,…) вызов функции

( … ) скобки или кортеж

[ … ] список или списковое включение

{кл:зн, …} словарь пар ключ–значение

`выражения` преобразование к строке (repr)

Таким образом, порядок вычислений операндов определяется такими правилами:

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

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT