Лутц М. - Изучаем Python (1077325), страница 24
Текст из файла (страница 24)
В таких языках программирования необходимо заниматься проработкой структур данных, управлять выделением памяти, реализовывать функции поиска и доступа к элементам структур и т, д. Это достаточно утомительно (и способствует появлению ошибок) и, как правило, отвлекает от достижения истинных целей. В типичных программах на языке Ру1)топ в этом нет необходимости. Ру()топ предоставляет мощную коллекцию объектных типов, встроенных непосредственно в язык, поэтому обычно нет никакой необходимости создавать собственные реализации объектов, предназначенных для решения поставленных задач, Фактически, если у вас нет потребностей в специальных видах обработки, которые не обеспечиваются встроенными типами объектов, вам всегда лучше использовать встроенные объекты вместо реализации своих собственных.
И вот почему: ° Встроенные объекты упрощают создание программ. Для решения простых задач часто вполне достаточно встроенных типов для представления структур данных проблемной области. В вашем распоряжении имеются такие мощные инструментальные средства, как коллекции (списки) и таблицы поиска (словари), поэтому вы можете использовать их непосредственно. Благодаря встроенным объектным типам языка Ру()топ вы можете выполнить значительный объем работы.
° Встроенные объекты — это компоненты расширений. Для решения сложных задач вы можете создавать собственные объекты, используя для этого классы языка РуФ)топ или интерфейсы языка С. Однако, как будет показано ниже, объекты, реализованные вручную, обычно основаны на таких встроенных типах, как списки и словари. Например, структура данных типа стек может быть реализована как класс, основанный на использовании списков. ° Встроенные объекты часто более эффективны, чем созданные вручную структуры данных. Встроенные типы языка РутЬоп используют уже оптимизированные структуры данных, реализованные на языке С для достижения высокой производительности.
Вы можете сами создавать подобные типы объектов, но вам придется приложить немало усилий, чтобы достичь скорости, которая обеспечивается встроенными типами объектов. из Зачем нужны встроенные типы? ° Встроенные объекты — зто стандартная часть языка. В определенной степени Ру1)топ многое заимствует как из языков, полагающихся на использование встроенных инструментальных средств (таких как 11ВР), так и полагающихся на мастерство программиста, который должен выполнить собственную реализацию инструментов и структур данных (таких как С++). В языке Ру()топ вы можете создавать собственные типы объектов, но в самом начале делать это не рекомендуется.
Более того, из-за того, что встроенные компоненты являются стандартными составляющими языка Ру()топ, они всегда остаются неизменными, тогда как собственные структуры имеют свойство изменяться от случая к случаю. Другими словами, встроенные типы объектов не только упрощают процесс программирования, но они обладают большей эффективностью и производительностью, чем большинство типов, созданных вручную.
Даже если вы создаете собственные типы объектов, встроенные объекты будут ядром любой программы на Ру()топ. Базовые типы данных в языке РУФоп В табл. 4.1 представлены некоторые встроенные типы объектов языка Ру()топ и некоторые синтаксические конструкции использования этих объектов в виде литералов — то есть выражения, которые генерируют эти объекты.' Некоторые из этих типов наверняка покажутся вам знакомыми, если ранее вам приходилось работать с другими языками программирования. Например, числа и строки представляют числовые и текстовые значения соответственно, а файлы обеспечивают интерфейс для работы с файлами, хранящимися в компьютере.
Таблица 4.1. Некоторые встроенные объекты Пример литерала/создания Тип объекта 1234, 3. 1415, 9991, 3»4), Юес1аа1 'зпаа', "9о1ао'а" (1, (2, 'тагес'), д) В этой книге иод термином литерал подразумевается выражение, создающее объект, которое иногда также называется константой. Следует иметь з виду, что термин «ковстанта» не означает объектов и переменных, которые никогда не изменяются (то есть этот термин никак не связан с директивой сопэт языка С++ или с понятием «вензмеияемый» («1ппии1аЫе») в языке Рудйои — эта тема будет рассматриваться ниже, з этой же главе). Числа Строки Списки Словари Кортежи Файлы Прочие типы ('Гсоо': 'зраа', 'таете': 'упа') (1,'эран , д, 9 ) аут11е = ореп('е993', 'г') Множества, сами типы, иопе, логические значения Глава 4. Введение в типы объектов языка Рутбоп Таблица 4.1 содержит далеко не полный список, потому что объектами являются все данные, которые приходится обрабатывать в программах на языке Ру1Ьоп.
Например, когда на языке Ру1Ьоп мы реализуется поиск текста по шаблону — создаются объекты шаблонов, когда программируются сетевые взаимодействия — используются объекты сокетов. Существуют и другие типы объектов, которые создаются в результате импорта и использования модулей, и все они обладают своим собственным поведением. Типы объектов, перечисленные в табл. 4.1, мы назвали базовыми, потому что они встроены непосредственно в язык Ру1)топ, то есть для создания большинства из них используется вполне определенный синтаксис.
Например, когда выполняется следующий программный код: »> 'враз' то, говоря техническим языком, выполняется выражение-литерал, которое генерирует и возвращает новый строковый объект. Такова специфика синтаксиса Ру1)топ создания этого объекта. Похожим образом выражение, заключенное в квадратные скобки, создает список, заключенное в фигурные скобки — словарь и т.
д. Хотя, как вы сможете убедиться, в языке Ру1)топ отсутствует конструкция объявления типа, сам синтаксис выполняемых выражений задает типы создаваемых и используемых объектов. Фактически, выражения, создающие объекты, подобные тем, что представлены в табл. 4.1, в языке Ру1)топ являются источниками типов. Не менее важно отметить, что как только будет создан объект, он будет ассоциирован со своим собственным набором операций на протяжении всего времени существования — над строками можно будет выполнять только строковые операции, над списками — только операции, применимые к спискам.
Как вы узнаете далее, в языке Ру1)топ используется динамическая типизация (типы данных определяется автоматически, и их не требуется объявлять в программном коде), но при этом он является языком со строгой типизацией (вы сможете выполнять над объектом только те операции, которые применимы к его типу). Функционально типы объектов, представленные в табл. 4. 1, являются более универсальными и более эффективными, чем может показаться. Например, вы узнаете, что списки и словари являются достаточно мощными средствами представления данных, которые обеспечивают поддержку коллекций и функций поиска., которые в низкоуровневых языках программирования приходится реализовывать вручную. Говоря коротко, списки обеспечивают поддержку упорядоченных коллекций других объектов, а словари реализуют возможность хранения объектов по ключам.
И списки, и словари могут быть вложенными, по мере необходимости могут увеличиваться и уменьшаться в размерах и могут содержать объекты любых типов. В последующих главах мы подробно изучим каждый из типов объектов, перечисленных в табл. 4.1. Но прежде чем углубляться в детали, 115 Числа Числа Если в прошлом вам приходилось заниматься программированием, некоторые типы объектов из табл.
4.1 скорее всего покажутся вам знакомыми. Но даже если это не так, числа являются чрезвычайно простым понятием. Базовый набор объектов языка РубЬоп включает в себя вполне ожидаемые типы: целые числа (числа без дробной части), числа с плавающей точкой (грубо говоря, числа с десятичной точкой) и более экзотические типы («длинные» целые числа с неограниченной точностью, комплексные числа с мнимой частью, числа с фиксированной десятичной точкой и множества). Несмотря на наличие некоторых необычных типов, базовые числовые типы в языке РуФЬоп действительно являются базовыми. Числа в РуФЬоп поддерживают набор самых обычных математических операций.
Например, символ «плюс» («) означает сложение, символ «звездочка» (*) — умножение, а два символа «звездочка» (**) — возведение в степень: »> 123 + 222 345 »> 1.5 ° 4 № Уиножение вежественник чисел 6.0 »> 2 ° ° 100 № 2 в стелени 700 126765060022822940149670320537бб № делочисленное сложение Обратите внимание на символ Ь в конце результата последней операции: когда возникает необходимость в более высокой точности, Руб)топ автоматически преобразует целые числа в «длинные» целые. Например, вы можете попробовать отыскать 2 в степени 1 000 000 (но едва ли стоит это делать, так как на экран будет выведено число длиной более 300 000 знаков, что может занять продолжительное время!).
Посмотрите, что происходит при выводе чисел с плавающей точкой: »> 3.1415 * 2 № гедг: в виде кода 6.2830000000000004 »> рг1п1 3.1415 ° 2 № втг: более удобочитаемо 6.283 Первый результат — это не ошибка, проблема здесь связана с отображением. Оказывается, вывести содержимое любого объекта можно двумя способами: с полной точностью (как в первом результате) и в форме, более удобной для восприятия человеком (как во втором результате). давайте познакомимся с базовыми типами объектов Руб)>оп в действии. Оставшаяся часть главы представляет собой обзор операций, которые мы более подробно будем исследовать в последующих главах.