Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 41
Текст из файла (страница 41)
В следующей главе мы приступим к всестороннему изучению чисел в языке Python. Но для начала ознакомьтесь с контрольными вопросами.Закрепление пройденногоКонтрольные вопросыВ следующих главах мы более подробно будем исследовать понятия, введенныев этой главе, поэтому здесь мы охватим лишь самые общие направления:1. Назовите четыре базовых типа данных в языке Python.2. Почему они называются базовыми?3. Что означает термин «неизменяемый» и какие три базовых типа языкаPython являются неизменяемыми?4.
Что означает термин «последовательность», и какие три типа относятсяк этой категории?152Глава 4. Введение в типы объектов языка Python5. Что означает термин «отображение» и какой базовый тип является отображением?6. Что означает термин «полиморфизм», и почему он имеет такое важное значение?Ответы1. К базовым типам объектов (данных) относятся числа, строки, списки, словари, кортежи, файлы и множества. Cами типы, None и логические значения также иногда относят к базовым типам.
Существует несколько типовчисел (целые, вещественные, комплексные, рациональные и фиксированной точности) и несколько типов строк (обычные и в кодировке Юникод –в Python 2.X; текстовые строки и строки байтов – в Python 3.0).2. Базовыми типами они называются потому, что являются частью самогоязыка Python и могут быть использованы в любой момент. Чтобы создатьобъект какого-либо другого типа, обычно бывает необходимо обращатьсяк функции из импортированного модуля. Для большинства базовых типов предусмотрен специальный синтаксис создания объектов, например‘spam’, – это выражение, создающее строку и определяющее набор операций,которые могут применяться к ней.
Вследствие этого базовые типы жестковшиты в синтаксис языка Python. Единственное отличие – объекты-файлы,для создания которых необходимо вызывать функцию open.3. «Неизменяемый» объект – это объект, который невозможно изменить послетого, как он будет создан. К этой категории объектов относятся числа, строки и кортежи. Но даже при том, что вы не можете изменить «неизменяемый» объект на месте, вы всегда можете создать вместо него новый объект,выполнив выражение.4. «Последовательность» – это упорядоченная по местоположению коллекцияобъектов.
К последовательностям относятся строки, списки и кортежи. Ковсем этим типам могут применяться операции, общие для всех последовательностей, такие как обращение к элементам по их индексам, конкатенация и получение срезов. Но помимо этого каждый из этих типов имеет рядспецифичных методов.5.
Под термином «отображение» подразумевается объект, который отображает ключи на ассоциированные с ними значения. Единственный базовый типданных в языке Python, который является отображением, – это словарь.Отображения не подразумевают упорядочение элементов по их позиции, ноони поддерживают возможность доступа к элементам по ключу, плюс рядспецифичных методов.6. «Полиморфизм» означает, что фактически выполняемая операция (такаякак +) зависит от объектов, которые принимают в ней участие. В языкеPython идея полиморфизма составляет ключевую концепцию (пожалуй,самую ключевую) – она не ограничивает применимость программного кодакаким-то определенным типом данных, благодаря чему этот код обычнов состоянии автоматически обрабатывать объекты самых разных типов.Глава 5.ЧислаНачиная с этой главы, мы станем погружаться в детали реализации языка Python. Данные в этом языке имеют форму объектов – это либо встроенные объекты, входящие в состав самого языка, либо объекты, создаваемыес помощью языковых конструкций Python или других языков, таких как C.Фактически объекты являются основой любой программы на языке Python.Поскольку объекты представляют самое фундаментальное понятие для программирования на языке Python, все наше внимание в первую очередь будетсосредоточено на объектах.В предыдущей главе мы коротко познакомились с базовыми типами объектов языка Python.
И хотя в ней были даны основные понятия, мы старалисьизбегать слишком специфичных подробностей в целях экономии книжногопространства. Теперь мы приступаем к более внимательному изучению концепции типов данных, чтобы восполнить детали, о которых раньше умалчивалось. Итак, приступим к изучению чисел – первой категории типов данныхв языке Python.Базовые числовые типыБольшинство числовых типов в языке Python не выделяются ничем необычным и наверняка покажутся вам знакомыми, если в прошлом вам уже приходилось использовать какой-либо язык программирования. Числа могут использоваться для представления информации о состоянии вашего банковскогосчета, о расстоянии до Марса, о числе посетителей вашего веб-сайта и всего,что можно выразить в числовой форме.Числа в языке Python представлены не единственным типом, а целой категорией родственных типов.
Язык Python поддерживает обычные числовые типы(целые и вещественные), а также литералы – для их создания, и выражения –для их обработки. Кроме того, Python предоставляет дополнительную поддержку чисел и объектов для работы с ними. Ниже приводится полный перечень числовых типов и инструментов, поддерживаемых в языке Python:•• Целые и вещественные числа•• Комплексные числа154Глава 5. Числа•• Числа фиксированной точности•• Рациональные числа•• Множества•• Логические значения•• Целые числа неограниченной точности•• Различные встроенные функции и модули для работы с числамиВ этой главе мы начнем с рассмотрения базовых числовых типов и основныхприемов работы с ними, а затем перейдем к исследованию остальных пунктовсписка.
Однако прежде чем начать писать программный код, в следующих нескольких разделах мы сначала узнаем, как в сценариях записываются и обрабатываются числа.Числовые литералыПомимо базовых типов данных язык Python предоставляет самые обычныечисловые типы: целые числа (положительные и отрицательные) и вещественные числа (с дробной частью), которые иногда называют числами с плавающейточкой. Язык Python позволяет записывать целые числа в виде шестнадцатеричных, восьмеричных и двоичных литералов.
Поддерживает комплексныечисла и обеспечивает неограниченную точность представления целых чисел(количество цифр в целых числах ограничивается лишь объемом доступнойпамяти). В табл. 5.1 показано, как выглядят числа различных типов в языкеPython в тексте программы (то есть в виде литералов).Таблица 5.1. Числовые литералыЛитералИнтерпретация1234, -24, 0, 9999999999999999999Обычные целые числа (с неограниченной точностью представления)1.23, 1., 3.14e-10, 4E210, 4.0e+210Вещественные числа0177, 0x9ff, 0b101010Восьмеричные, шестнадцатеричныеи двоичные литералы целых чиселв версии 2.60o177, 0x9ff, 0b101010Восьмеричные, шестнадцатеричныеи двоичные литералы целых чиселв версии 3.03+4j, 3.0+4.0j, 3JЛитералы комплексных чиселВообще в числовых типах языка Python нет ничего сложного, но мне хотелосьбы сделать несколько замечаний о принципах использования литералов в программном коде:Литералы целых и вещественных чиселЦелые числа записываются как строки, состоящие из десятичных цифр.Вещественные числа могут содержать символ десятичной точки и/или необязательную экспоненту со знаком, которая начинается с символа e или E.Если в записи числа обнаруживается точка или экспонента, интерпретаторPython создает объект вещественного числа и использует вещественную (неБазовые числовые типы155целочисленную) математику, когда такой объект участвует в выражении.Правила записи вещественных чисел в языке Python ничем не отличаютсяот правил записи чисел типа double в языке C и потому вещественные числав языке Python обеспечивают такую же точность представления значений,как и в языке C.Целые числа в Python 2.6: обычные и длинныеВ Python 2.6 имеется два типа целых чисел: обычные (32-битные) и длинные (неограниченной точности).
Если числовой литерал заканчиваетсясимволом l или L, он рассматривается интерпретатором как длинное целоечисло. Целые числа автоматически преобразуются в длинные целые, еслиих значения не умещаются в отведенные 32 бита, поэтому вам не требуетсявводить символ L – интерпретатор автоматически выполнит необходимыепреобразования, когда потребуется увеличить точность представления.Целые числа в Python 3.0: один типВ Python 3.0 обычные и длинные целые числа были объединены в один типцелых чисел, который автоматически поддерживает неограниченную точность, как длинные целые в ����������������������������������������������Python���������������������������������������� 2.6. По этой причине теперь не требуется завершать литералы целых чисел символом l или L, и при выводе целыхчисел этот символ никогда не выводится.
Кроме того, для большинства программ это изменение в языке никак не скажется на их работоспособности,при условии, что они явно не проверяют числа на принадлежность к типудлинных целых, имеющемуся в версии 2.6.Шестнадцатеричные, восьмеричные и двоичные литералыЦелые числа могут записываться как десятичные (по основанию 10), шестнадцатеричные (по основанию 16), восьмеричные (по основанию 8) и двоичные (по основанию 2). Шестнадцатеричные литералы начинаются с комбинации символов 0x или 0X, вслед за которыми следуют шестнадцатеричныецифры (0-9 и A-F).
Шестнадцатеричные цифры могут вводиться как в нижнем, так и в верхнем регистре. Литералы восьмеричных чисел начинаются с комбинации символов 0o или 0O (ноль и следующий за ним символ «o»в верхнем или нижнем регистре), вслед за которыми следуют восьмеричныецифры (0-7). В Python 2.6 и в более ранних версиях восьмеричные литералымогут начинаться только с символа 0 (без буквы «o»), но в версии 3.0 такаяформа записи считается недопустимой (при использовании прежней формызаписи восьмеричные числа легко можно перепутать с десятичными, поэтому была принята новая форма записи, когда восьмеричные литералы начинаются с комбинации символов 0o). Двоичные литералы впервые появилисьв версиях 2.6 и 3.0, они начинаются с комбинации символов 0b или 0B, вследза которыми следуют двоичные цифры (0 – 1)Примечательно, что все эти литералы создают объекты целых чисел – ониявляются всего лишь альтернативными формами записи значений.