Саммерфилд - Программирование на Python 3 (1077331), страница 55
Текст из файла (страница 55)
Ииипег) или к какому-нибудь определенному типу, например, 1з(пзгапсе(х, поэЬегз.1пгерга1). Специалисты, занимающиеся программированием научных или инженерных вычислений, найдут полезным пакет ИваРу, разрабатываемый сторонними разработчиками. Этот пакет предоставляет высокоэффективную реализацию многомерных массивов, основных функций линейной алгебры и преобразований Фурье, а также инструменты интеграции с программным кодом на языках С, С++ и Рог(гап.
Пакет Яс(Ру включает ИозРу и дополняет его модулями, предназначенными для выполнения статистических вычислений, обработки сигналов и изображений, модулями с генетическими алгоритмами и многими другими. Оба пакета доступны бесплатно на сайте ввв.зс(ру.ога. Обзор стандартной библиотеки языка рутбоп 253 Время и дата Модули св1е пса г и 0 а(еттае содержат функции и классы, предназначенные для работы с датами и временем. Однако они основаны на абстрактном Григорианском календаре, поэтому они не годятся для работы с датами в календарях, предшествовавших Григорианскому. Дата и время — это очень сложная тема.
В разное время и в разных местах использовались разные календари. Продолжительность суток не равна точно 24 часам, продолжительность года не равна точно Збб дням, существует летнее и зимнее время, а также различные часовые пояса. Класс оатет1ве.багет(ае (но не в классе затес(ае.овсе) предоставляет поддержку работы с часовыми поясами, хотя она не включается по умолчанию. Однако имеются модули сторонних производителей, которые с успехом восполняют этот недостаток, например, овтеШ(1 (шшшЛаЫх.огу/рут/топ-г(атеии() и ахдвтеТтае (шшш.еуеп(х.сот/ргаг(иста/ руМоп/тхВаве/тхРатеТ(те). Модуль стае используется для работы с отметками времени, которые являются простыми числовыми значениями, представляющими число секунд, прошедших от начала эпохи (1970-01-01ТОО:00:00 в Т))т)1Х).
Этот модуль может использоваться для получения на машине отметок текущего времени Т)ТС (Соогт)1патес) 1)птчегва! Типе — универсальное глобальное время) или локального времени, учитывающего переход на летнее время, а также для создания строк, представляющих дату, время и дату/время, отформатированных разными способами. Кроме того, он может использоваться для анализа строк, содержащих дату и время. Пример: модули са(елстаг, дате11лзе и 1(лзе Объекты типа овтет(ае.овтет(ве обычно создаются программным способом, тогда как объекты, хранящие дату/время Т)ТС, обычно получают информацию из внешних источников, таких как время создания файла. Ниже приводится несколько примеров: тарогт ов1вповг, овтвттвв, ттвв аооп овтвттав в = овтвттвв.овтвттвв(19б9, 7, 20, 20, 17, 40) вооп став = св1вповг.с1авдв(вооп овсеттвв в.ототтввтор1в()) вооп овтеттвв ь = овтвттав.овтет1вв.отсгговттвввтввр(вооп ттвв) вооп овтвттвв в,шогогввт() в вернет: '1909-07-20т20.17:40' вооп овтвыав ь.твогогват() 4 вернет: '19б9-07-20т20:17;40' ттао.зтттттао(тат-аа-ьОТ%Н«ЬН:%9", ттае.даттао(аООП тто)) Переменная аооп Сатетше а является объектом типа овтеттве,затес(ае и хранит дату и время посадки корабля «Аполлон 11» на поверхность Луны.
Переменная аооп т! ае имеет тип тот и хранит число секунд, прошедших от начала эпохи до момента посадки на Луну. Это число возвращает функция са1еповг.ттведа(), которая принимает объект типа стае втгост, возвращаемый функцией багет(ае. овтеттае. Ьтст(ветор1е(), и возвращает число секунд, которое представляет тип стае в(гост. 254 Глава 5.
Модули (Поскольку посадка на Луну произошла до начала эпохи ()Х1Х, число получится отрицательным.) Переменная вооп ба1е1тае б является объектом типа бате!!ае, бате!!ве, и ее значение было получено из целочисленной переменной аосп 1!ве, чтобы продемонстрировать возможность преобразования числа секунд, прошедших с начала эпохи в объект типа ба1е1тве, ба1е1тае.т Последние три строки возвращают идентичные строки, содержащие дату/время в формате 180 8601. Текущие дату/время \)ТС можно получить в виде объекта бате!!ве.
ба1е1!ве, вызвав функцию батеттае. бз1е1тае, отспои(), а в виде числа секунд, прошедших с начала эпохи, — вызвав функцию 1!ае.1!ве(). Для получения локальных даты/времени можно использовать ба1е1!ве. ба1е1!ве. пои() или!!ве, вН1!ве(1тае,1оса11тае () ). Алгоритмы и типы коллекций а Именованные кортежи, отр.! 34 В пакете со11ес1!опз также присутствуют определения нечисловых аб- страктных классов Ру()топ (классы, которые могут наследоваться, но которые нельзя использовать непосредственно). Они будут обсуждать- ся в главе 8.
К сожалению, в системе 'йг!пбоагз функция батеттае. батоттае. отстговттвео- тавр() не может обрабатывать отрицательные отметки времени, то есть от- метки времени, предшествующие дате 1 января 1970 года. Модуль Ьтзест содержит функции поиска в отсортированных последовательностях, таких как отсортированные списки, а также функции вставки элементов с сохранением порядка сортировки. Функции этого модуля используют алгоритм поиска методом половинного деления, поэтому они отличаются очень высокой скоростью работы. Модуль Пеарп содержит функции для преобразования последовательности, такой как список, в»кучу» — разновидности коллекции, где первым элементом (в позиции с индексом О) всегда является наименьший элемент, и функции для добавления и удаления элементов, при которых последовательность остается кучей.
Пакет со11есттопз содержит определения таких типов данных, как словарь со11ес1!опз.бе(ао11бтс1 и кортеж со11ес1!опз. пааеб1ор1е, которые уже рассматривались ранее. Кроме того, в этом модуле объявляются типы данных сс11ест!опз, бзег!тз1 и со11ес1топз,бзегбтс1, хотя на практике чаще используются встроенные подклассы типов 1(з1 и б!с1, чем эти типы данных.
Еще один тип данных — со11ес1!опз. берне — похож на список, но если список обеспечивает очень быстрое добавление и удаление элементов в конце списка, то очереди са11ес1топз.босое обеспечивают очень быстрое добавление и удаление элементов на обоих концах очереди — как в конце, так и в начале. Обзор стандартной библиотеки языка Рут)1ол Модуль а г гау содержит определение типа последовательности а г га у, а ггау, способной хранить числа или символы весьма экономным способом. Этот тип данных напоминает списки, за исключением того, что объекты этого типа могут хранить только элементы определенного типа, который определяется на этапе его создания, поэтому, в отличие от списков, они не могут одновременно хранить объекты разных типов. Упоминавшийся ранее пакет во41Ру также предоставляет эффективную реализацию массивов.
Модуль иеакгет содержит средства создания слабых ссылок, которые ведут себя подобно обычным ссылкам на объекты, за исключением того, что если единственная ссылка на объект — слабая ссылка, то такой объект может считаться готовым к утилизации. Это предотвращает сохранение объекта в памяти из-за присутствия ссылки на него. Естественно, имеется возможность проверить существование объекта, на который указывает слабая ссылка, и при его наличии мы можем с помощью этой ссылки обратиться к объекту. Пример: модуль Ьеарц Модуль леард содержит средства преобразования списка в кучу, а также для добавления элементов в кучу и удаления их из кучи, сохраняя порядок следования элементов в списке, характерный длл кучи. Куча— это двоичное дерево, обладающее свойствами кучи, когда первый элемент (находящийся в позиции с индексом О) является самым маленьким.г Каждое поддерево в куче также является кучей, поэтому любое поддерево тоже обладает всеми свойствами кучи.
Ниже показано, как можно создать кучу с чистого листа: жрогт лвард авар = [) яваро.вварривл(авар, (5, "гввт")) яварс.лварривя(авар, вваро лварривя(авар, (4, "втооу")) Если список уже существует, его можно преобразовать в кучу с помощью функции Леард. Леарз бу(а))ат), которая выполнит необходимое переупорядочивание элементов списка. Наименьший элемент может быть удален из кучи с помощью функции Леард.
Леаррор(оеар), гог х тп яваро.эвгдв((1, 3, 5, 6), (2, 4, 7), (О, 1, 6, 8, 9)): ршпт(х, вяо=" ") 4 ввведвт: О 1 1 2 3 4 5 6 7 8 8 9 Функция Леард.негде() принимает произвольное число отсортированных итерируемых объектов в виде аргументов и возвращает итератор, позволяющий выполнить итерации по всем элементам всех итерируемых объектов в порядке возрастания.
Строго говоря, модуль Лваро реализует тнп кучи пил Ивар. Кучи, где первый элемент всегда является наибольшим, относятся к типу птах Ивар. 256 Глава 5.Модули Форматы файлов, кодировки и сохранение данных о Стандартная библиотека имеет обширную поддержку Кодировки символов, стандартных форматов файлов и кодировок. Модуль огр.112 Ьаве64 содержит функции чтения и записи с использованием кодировок Ваве16, Ваве32 и Ваве64 в соответствии с КУС 3648.' Модуль ооорш содержит функции чтения и записи в формате «г(по(ег(-рг(п(аЫе».в Этот формат определяется документом КУС 1521 и используется для представления данных М1МЕ (Мп)11рцгрове 1п1егпе1 Ма11 Ех1епв1опв — многоцелевые расширения электронной почты Интернета).
Модуль оо содержит функции чтения и записи данных в формате ппепсоде. Документ КУС 1832 определяет «Ех1егпа1 Ра1а Кергевеп$а11оп 81апг(агд» (стандарт представления внешних данных), а модуль ха г11Ь содержит функции чтения и записи данных в этом формате. Существуют также модули, предоставляющие возможность чтения и записи архивных файлов наиболее популярных форматов. Модуль Ь22 обеспечивает возможность работы с файлами.бг2, модуль рг(р обеспечивает возможность работы с файлами .Лг, модуль та г111е обеспечивает возможность работы с файлами Лаг, Лог.дг (а также лдг) и лог.Ьг2 и модуль 21р(11е обеспечивает возможность работы с файлами .г(р. В этом подразделе мы увидим пример использования модуля гагг11е, а немного ниже (на стр. 266) будет представлен небольшой пример, в котором используется модуль ргтр.
Еще раз с модулем с21р мы встретимся в главе 7. Кроме того, стандартная библиотека обеспечивает поддержку некоторых форматов представления аудиоданных — например, модуль а1гс реализует поддержку формата А1УР (Апд1о 1п$егс)галде У11е Уогша(— формат файлов для обмена аудиоданными) и модуль иаое обеспечивает возможность для работы с файлами .шар (несжатыми).
Некоторыми разновидностями аудиоданных можно манипулировать с помощью модуля аиа1оор, а модуль впспбг предоставляет пару функций, позволяющих определить тип аудиоданных, хранящихся в файле, и некоторые характеристики этих данных, такие как частота дискретизации. Формат представления конфигурационных файлов (подобный формату файлов йл( в системе 1йг(пг(оввз) определяется документом КРС 822, Кг С (Квцпевв Гог Сопппепвв — запрос на комментарии и предложения) — зто документы, используемые для определения различных ннтернет-технологий.
Каждый документ имеет уникальный идентификационный номер, и многие из них со временем становятся официальными стандартами. Способ 7-битной кодировки, когда символы, не входящие в набор АЯСП, преобразуются в их шестнадцатеричные коды, записанные латиницей.— Прим. перев. Обзор стандартной библиотеки языка Ру(Ьоп 254 а модуль соп(тррагэег предоставляет функции чтения и записи таких файлов. Многие приложения, такие как Ехсе!, могут читать и писать данные в формате СЯЧ (Сопппа ЯерагаФес( Ча1ие — значения, разделенные запятыми) или в его разновидностях, таких как значения, разделенные символами табуляции. Модуль сау обеспечивает средства чтения и записи этих форматов и в состоянии учитывать некоторые особенности, препятствующие возможности непосредственной обработки файлов СЯЧ.