М. Лутц - Изучаем Python (4-е издание)- 2011 (1126907), страница 32
Текст из файла (страница 32)
В таких языках программирования необходимо заниматься проработкой структур данных, управлять выделением памяти, реализовыватьфункции поиска и доступа к элементам структур и так далее. Это достаточноутомительно (и способствует появлению ошибок) и, как правило, отвлекает отдостижения истинных целей.В типичных программах на языке Python в этом нет необходимости. Pythonпредоставляет мощную коллекцию объектных типов, встроенных непосредственно в язык, поэтому обычно нет никакой необходимости создавать собственные реализации объектов, предназначенных для решения поставленныхзадач.
Фактически если у вас нет потребности в специальных видах обработки,которые не обеспечиваются встроенными типами объектов, вам всегда лучше использовать встроенные объекты вместо реализации своих собственных.И вот почему:•• Встроенные объекты упрощают создание программ. Для решения простых задач часто вполне достаточно встроенных типов для представленияструктур данных предметной области.
В вашем распоряжении имеются такие мощные инструментальные средства, как коллекции (списки) и таблицы поиска (словари), поэтому вы можете использовать их непосредственно.Благодаря встроенным объектным типам языка Python вы можете выполнить значительный объем работы.•• Встроенные объекты – это компоненты расширений. Для решения сложных задач вы можете создавать собственные объекты, используя для этогоклассы языка Python или интерфейсы языка C. Однако, как будет показанониже, объекты, реализованные вручную, обычно основаны на таких встроенных типах, как списки и словари.
Например, структура данных типа стекможет быть реализована как класс, основанный на использовании списков.•• Встроенные объекты часто более эффективны, чем созданные вручнуюструктуры данных. Встроенные типы языка Python используют уже оптимизированные структуры данных, реализованные на языке C для достижения высокой производительности. Вы можете сами создавать подобныетипы объектов, но вам придется приложить немало усилий, чтобы достичьскорости, которая обеспечивается встроенными типами объектов.•• Встроенные объекты – это стандартная часть языка. В определенной степени Python многое заимствует как из языков, полагающихся на использование встроенных инструментальных средств (таких как LISP), так и полагающихся на мастерство программиста, который должен выполнить собственную реализацию инструментов и структур данных (таких как C++).В языке Python вы можете создавать собственные типы объектов, но в самом начале делать это не рекомендуется. Более того, из-за того, что встроенные компоненты являются стандартными составляющими языка Python,они всегда остаются неизменными, тогда как собственные структуры имеют свойство изменяться от случая к случаю.123Зачем нужны встроенные типы?Другими словами, встроенные типы объектов не только упрощают процесспрограммирования, но они обладают большей эффективностью и производительностью, чем большинство типов, созданных вручную.
Даже если вы создаете собственные типы объектов, встроенные объекты будут ядром любойпрограммы на Python.Базовые типы данных в языке PythonВ табл. 4.1 представлены некоторые встроенные типы объектов языка Pythonи некоторые синтаксические конструкции использования этих объектов в виделитералов – то есть выражения, которые генерируют эти объекты.1 Некоторыеиз этих типов наверняка покажутся вам знакомыми, если ранее вам приходилось работать с другими языками программирования. Например, числа и строки представляют числовые и текстовые значения соответственно, а файлы обеспечивают интерфейс для работы с файлами, хранящимися в компьютере.Таблица 4.1.
Некоторые встроенные объектыТип объектаПример литерала/созданияЧисла1234, 3.1415, 3+4j, Decimal, FractionСтроки‘spam’, “guido’s” , b’a\x01c’Списки[1, [2, ‘three’], 4]Словари{‘food’: ‘spam’, ‘taste’: ‘yum’}Кортежи(1,’spam’, 4, ‘U’)Файлыmyfile = open(‘eggs’, ‘r’)Множестваset(‘abc’), {‘a’, ‘b’, ‘c’}Прочие базовые типыСами типы, None, логические значенияТипы структурных элементовпрограммФункции, модули, классы (часть IV,часть V, часть VI)Типы, имеющие отношениек реализацииКомпилированный программный код,стек вызовов (часть IV, часть VII)Таблица 4.1 содержит далеко не полный список, потому что объектами являются все данные, которые приходится обрабатывать в программах на языкеPython. Например, когда на языке Python реализуется поиск текста по шаблону, – создаются объекты шаблонов, когда программируются сетевые взаимодействия, – используются объекты сокетов. Существуют и другие типы объектов, которые создаются в результате импорта и использования модулей, и всеони обладают своим собственным поведением.1В этой книге под термином литерал подразумевается выражение, создающее объект, которое иногда также называется константой.
Следует иметь в виду, что термин «константа» не означает объекты и переменные, которые никогда не изменяются (то есть этот термин никак не связан с директивой const языка C++ или с понятием«неизменяемый» («immutable») в языке Python, – эта тема будет рассматриватьсяниже, в разделе «Неизменяемость»).124Глава 4. Введение в типы объектов языка PythonВ следующих частях книги вы узнаете, что структурные элементы программ,такие как функции, модули и классы, также являются объектами в языке Python – они создаются с помощью инструкций и выражений, таких какdef, class, import и lambda, и могут свободно передаваться между различнымичастями сценариев, сохраняться в других объектах и так далее. Кроме того,в языке Python имеется множество типов, имеющих отношение к реализации,таких как объекты с компилированным программным кодом, – они представляют интерес скорее для разработчиков инструментов, чем для прикладныхпрограммистов.
Все эти типы также будут рассматриваться в последующихчастях книги.Типы объектов, перечисленные в табл. 4.1, обычно называют базовыми, потому что они встроены непосредственно в язык Python, то есть для созданиябольшинства из них используется вполне определенный синтаксис. Например,когда выполняется следующий программный код:>>> ‘spam’то, говоря техническим языком, выполняется выражение-литерал, которое генерирует и возвращает новый строковый объект. Такова специфика синтаксиса Python создания этого объекта. Похожим образом выражение, заключенноев квадратные скобки, создает список, заключенное в фигурные скобки – словарь и так далее.
Хотя, как вы сможете убедиться, в языке Python отсутствуетконструкция объявления типа, сам синтаксис выполняемых выражений задает типы создаваемых и используемых объектов. Фактически выражения, создающие объекты, подобные тем, что представлены в табл. 4.1, в языке Pythonявляются источниками типов.Не менее важно отметить, что как только будет создан объект, он будет ассоциирован со своим собственным набором операций на протяжении всего времени существования – над строками можно будет выполнять только строковыеоперации, над списками – только операции, применимые к спискам. Как выузнаете далее, в языке Python используется динамическая типизация (типыданных определяются автоматически и их не требуется объявлять в программном коде), но при этом он является языком со строгой типизацией (вы сможетевыполнять над объектом только те операции, которые применимы к его типу).Функционально типы объектов, представленные в табл. 4.1, являются болееуниверсальными и более эффективными, чем может показаться.
Например,вы узнаете, что списки и словари являются достаточно мощными средствамипредставления данных, обеспечивающими поддержку коллекций и функцийпоиска, которые в низкоуровневых языках программирования приходится реализовывать вручную. Говоря коротко, списки обеспечивают поддержку упорядоченных коллекций других объектов, а словари реализуют возможностьхранения объектов по ключам. И списки, и словари могут быть вложенными,по мере необходимости увеличиваться и уменьшаться в размерах и содержатьобъекты любых типов.В последующих главах мы подробно изучим каждый из типов объектов, перечисленных в табл. 4.1.
Но прежде чем углубляться в детали, давайте познакомимся с базовыми типами объектов Python в действии. Оставшаяся частьглавы представляет собой обзор операций, которые мы более подробно будемисследовать в последующих главах. Не следует надеяться, что в этой главебудут даны исчерпывающие объяснения, поскольку основная ее цель состоит125Числав том, чтобы разжечь ваш аппетит и представить некоторые базовые идеи. Однако лучший способ что-то начать – это просто начать, поэтому перейдем сразук программному коду.ЧислаЕсли в прошлом вам приходилось заниматься программированием, некоторыетипы объектов из табл. 4.1 скорее всего покажутся вам знакомыми. Но дажеесли это не так, числа являются чрезвычайно простым понятием.
Базовый набор объектов языка Python включает в себя вполне ожидаемые типы: целыечисла (числа без дробной части), вещественные числа (грубо говоря, числа с десятичной точкой) и более экзотические типы (комплексные числа с мнимойчастью, числа с фиксированной точностью, рациональные числа, представленные парой целых чисел, – числитель и знаменатель дроби, и множества).Несмотря на наличие некоторых необычных типов, базовые числовые типыв языке Python действительно являются базовыми.