Начнем с одной небольшой тайны и ее разгадки. Что, по-вашему, означают следующие две строки?
Мы рассмотрим простейшие встроенные в Python типы данных:
булевы значения (которые имеют значение True или False);
целые числа (вроде 42 и 100 000 000);
числа с плавающей точкой (числа с десятичной запятой, вроде 3,14159 или экспоненты, вроде 1,0е8, что означает «один умножить на десять в восьмой степени», или 100 000 000,0);
Мы начали с базовых типов данных Python: булевых значений, целочисленных значений, чисел с плавающей точкой и строк. Если представлять их как атомы, то структуры данных, которые мы рассмотрим в этой главе, можно назвать молекулами. Так и есть: мы объединим эти базовые типы в более сложные структуры.
В первых трех главах вы увидели множество примеров данных, но практически не работали с ними. В большинстве примеров использовался интерактивный интерпретатор, а сами они были довольно короткими. Теперь вы увидите, как структурировать код Python, а не только данные.
Вы уже прошли путь от встроенных типов данных до создания более крупных структур данных и кода. В этой главе вы наконец дойдете до самого главного и научитесь писать реалистичные и объемные программы на Python.
К этому моменту вы уже познакомились с такими структурами данных, как строки и словари, а также со структурами кода — функциями и модулями. В текущей главе вы узнаете о пользовательской структуре данных — объектах.
Из этой главы вы узнаете множество приемов приручения данных. Большинство из них касаются встроенных типов данных.
Активная программа работает с данными, которые хранятся в запоминающем устройстве с произвольным доступом (Random Access Memory (RAM)). RAM — очень быстрая память, но она дорога и требует постоянного питания; если питание пропадет, то все данные, которые в ней хранятся, будут утеряны. Жесткие диски медленнее оперативной памяти, но они более емкие, стоят дешевле и могут хранить данные даже после того, как кто-то выдернет шнур питания.
На французско-швейцарской границе располагается CERN — Институт исследования физики частиц, он может показаться хорошим убежищем для злодея из франшизы о Джеймсе Бонде. К счастью, его задача заключается не в получении мирового господства, а в том, чтобы понять принципы работы Вселенной. Это всегда приводило к тому, что CERN генерировал удивительные объемы данных, заставляя физиков и компьютерщиков держать темп.
Каждый день, когда вы используете компьютер, вы выводите в виде списка на экран содержимое каталогов, создаете и удаляете файлы и выполняете другую необходимую работу, даже если это не очень захватывает. Вы также можете выполнить эти (и другие) задачи с помощью программ, написанных на Python. Сможет ли эта сила свести вас с ума или заставить потерять сон? Поживем — увидим.
До этого момента большинство программ, которые вы писали, запускались в одном месте (на одном компьютере) по одной строке за раз (последовательные). Но мы можем делать больше одного дела одновременно (конкуренция) и в нескольких местах сразу (распределенные вычисления, или работа с сетями). Существует несколько хороших причин бросить вызов пространству и времени.
Эта глава посвящена науке и искусству разработки с помощью Python, она содержит рекомендации и правила хорошего тона. Изучите их, и вы тоже сможете стать настоящим питонщиком.
Вы не вспомните то, что написали. Иногда случается так, что я смотрю на код, даже на тот, который написал недавно, и не понимаю, откуда он взялся. Именно поэтому полезно документировать собственный код. Документация может включать в себя комментарии и строки документации, также полезно давать переменным, функциям, модулям и классам осмысленные имена. Однако не перегибайте палку, как в этом примере:
Время от времени я делаю небольшое изменение в своем коде и говорю себе: «Выглядит неплохо, можно отправлять». А затем все ломается. Ой! Каждый раз, когда я делаю это (к счастью, со временем все реже и реже), я чувствую себя глупцом и клянусь, что в следующий раз напишу еще больше тестов.
Всегда тестируйте свой код. Чем лучше тесты, тем меньше вам предстоит работы в дальнейшем. Однако ошибки случаются, и их нужно исправлять. Самый простой способ выполнять отладку в Python — построчно выполнять код.
Эти приемы полезны, но иногда ничто не сможет заменить настоящий отладчик. Большинство IDE содержат отладчики, чьи возможности и пользовательские интерфейсы могут варьироваться. В этом разделе опишем использование стандартного отладчика Python pdb
В какой-то момент вам может понадобиться перейти от использования выражений print() к записи сообщений в журнал. Журнал, как правило, представляет собой системный файл, в котором накапливаются сообщения, содержащие полезную информацию вроде временной метки или имени пользователя, запустившего программу.
Обычно Python работает довольно быстро, однако иногда его скорости не хватает. В большинстве случаев вы можете ускорить работу, выбрав более качественный алгоритм или структуру данных. Идея заключается в том, чтобы знать, где это сделать. Даже опытные программисты ошибаются довольно часто. Вам нужно быть очень осторожными и семь раз отмерить, прежде чем отрезать. Это приводит нас к использованию таймеров.
Когда вы работаете над небольшой группой программ, то обычно можете отслеживать внесенные собственноручно изменения — до тех пор, пока не сделаете глупую ошибку и не потеряете несколько дней работы. Системы управления исходным кодом защитят ваш код от сил зла в лице вас самих.
Возможно, вы художник или музыкант. Или, может быть, просто хотите попробовать что-то креативное, выходящее за рамки привычной деятельности.
Униформа бизнесмена — костюм и галстук. Но по какой-то причине, когда он решает взяться за дело, он вешает пиджак на спинку стула, ослабляет галстук, закатывает рукава и наливает себе кофе. В то же время бизнесвумен без особого парада просто выполняет свою работу. Может быть, возьмет латте.
В последние годы в основном из-за ПО, показанного в этом приложении, Python стал очень популярен среди ученых. Если вы и сами ученый или студент, то, возможно, пользовались инструментами вроде MatLab и R или традиционными языками вроде Java, C или C++. В этом приложении вы увидите, что Python стал отличной платформой для научного анализа и публикации результатов.
К моменту, когда Python 3 будет предустановлен на каждом компьютере, тостеры будут заменены 3D-принтерами, которые каждый день будут выдавать пончики. В операционной системе Windows вообще нет Python, а OS X, Linux и Unix, как правило, имеют старые версии. До тех пор пока это не исправили, вам, скорее всего, придется устанавливать Python 3 самостоятельно.
1. Если вы еще не установили Python 3, сделайте это сейчас. Прочтите приложение Г, чтобы узнать детали.
1. Сколько секунд содержится в часе? Используйте интерактивный интерпретатор как калькулятор и умножьте количество секунд в минуте (60) на количество минут в часе (тоже 60):
1. Создайте список, который называется years_list, содержащий год, в который вы родились, и каждый последующий год вплоть до вашего пятого дня рождения. Например, если вы родились в 1980 году, список будет выглядеть так: years_list = [1980, 1981, 1982, 1983, 1984, 1985].
1. Присвойте значение 7 переменной guess_me. Далее напишите условные проверки (if, else и elif), чтобы вывести строку 'too low', если значение переменной guess_me меньше 7, 'too high' — если оно больше 7, и 'just right' — если равно 7:
1. Создайте файл, который называется zoo.py. В этом файле объявите функцию hours(), которая выводит на экран строку 'Open 9–5 daily'. Далее используйте интерактивный интерпретатор, чтобы импортировать модуль zoo и вызвать его функцию hours().
1. Создайте класс, который называется Thing, не имеющий содержимого, и выведите его на экран. Затем создайте объект example этого класса и также выведите его. Совпадают ли выведенные значения?
1. Создайте строку Unicode с именем mystery и присвойте ей значение '\U0001f4a9'. Выведите на экран значение строки mystery. Найдите имя Unicode для mystery:
1. Присвойте строку 'This is a test of the emergency text system' переменной test1 и запишите переменную test1 в файл с именем test.txt:
1. Если вы еще не установили Flask, сделайте это сейчас. Это также установит werkzeug, jinja2 и, возможно, другие пакеты.
1. Запишите текущие дату и время как строку в текстовый файл today.txt:
1. Используйте объект класса socket, чтобы реализовать службу, сообщающую текущее время. Когда клиент отправляет на сервер строку 'time', верните текущие дату и время как строку ISO.
Некоторые вещи мне приходится подсматривать слишком часто. Вот несколько таблиц, которые, надеюсь, окажутся вам полезны.