Язык программирования Python - [4]

Шрифт
Интервал

Смешивать вместе формы >try–except и >try–finally нельзя.

Встроенные типы данных

Как уже говорилось, все данные в Python представлены объектами. Имена являются лишь ссылками на эти объекты и не несут нагрузки по декларации типа. Значения встроенных типов имеют специальную поддержку в синтаксисе языка: можно записать литерал строки, числа, списка, кортежа, словаря (и их разновидностей). Синтаксическую же поддержку операций над встроенными типами можно легко сделать доступной и для объектов определяемых пользователей классов.

Следует также отметить, что объекты могут быть неизменчивыми и изменчивыми. Например, строки в Python являются неизменчивыми, поэтому операции над строками создают новые строки.

Карта встроенных типов (с именами функций для приведения к нужному типу и именами классов для наследования от этих типов):

• специальные типы: >None, >NotImplemented и >Ellipsis;

• числа;

 ○ целые

  • обычное целое >int

  • целое произвольной точности >long

  • логический >bool

 ○ число с плавающей точкой >float

 ○ комплексное число >complex

• последовательности;

 ○ неизменчивые:

  • строка >str;

  • Unicode–строка >unicode;

  • кортеж >tuple;

 ○ изменчивые:

  • список >list;

• отображения:

 ○ словарь >dict

• объекты, которые можно вызвать:

 ○ функции (пользовательские и встроенные);

 ○ функции–генераторы;

 ○ методы (пользовательские и встроенные);

 ○ классы (новые и «классические»);

 ○ экземпляры классов (если имеют метод >__call__);

• модули;

• классы (см. выше);

• экземпляры классов (см. выше);

• файлы file;

• вспомогательные типы >buffer, >slice.

Узнать тип любого объекта можно с помощью встроенной функции >type().

Тип int и long

Два типа: >int (целые числа) и >long (целые произвольной точности) служат моделью для представления целых чисел. Первый соответствует типу >long в компиляторе C для используемой архитектуры. Числовые литералы можно записать в системах счисления с основанием 8, 10 или 16:

># В этих литералах записано число 10

>print 10, 012, 0xA, 10L

Набор операций над числами — достаточно стандартный как по семантике, так и по обозначениям:

>>>> print 1 + 1, 3 — 2, 2*2, 7/4, 5%3

>2 1 4 1 2

>>>> print 2L ** 1000

>107150860718626732094842504906000181056140481170553360744375038

>837035105112493612249319837881569585812759467291755314682518714

>528569231404359845775746985748039345677748242309854210746050623

>711418779541821530464749835819412673987675591655439460770629145

>71196477686542167660429831652624386837205668069376

>>>> print 3 < 4 < 6, 3 >= 5, 4 == 4, 4 != 4 # сравнения

>True False True False

>>>> print 1 << 8, 4 >> 2, ~4 # побитовые сдвиги и инверсия

>256 1–5

>>>> for i, j in (0, 0), (0, 1), (1, 0), (1, 1):

>... print i, j, ":", i & j, i | j, i ^ j # побитовые операции

>...

>0 0 : 0 0 0

>0 1 : 0 1 1

>1 0 : 0 1 1

>1 1 : 1 1 0

Значения типа >int должны покрывать диапазон от–2147483648 до 2147483647, а точность целых произвольной точности зависит от объема доступной памяти.

Стоит заметить, что если в результате операции получается значение, выходящее за рамки допустимого, тип >int может быть неявно преобразован в >long:

>>>> type(-2147483648)

>

>>>> type(-2147483649)

>

Также нужно быть осторожным при записи констант. Нули в начале числа — признак восьмеричной системы счисления, в которой нет цифры 8:

>>>> 008

> File "", line 1

> 008

>   ^

>SyntaxError: invalid token

Тип float

Соответствует C–типу >double для используемой архитектуры. Записывается вполне традиционным способом либо через точку, либо в нотации с экспонентой:

>>>> pi = 3.1415926535897931

>>>> pi ** 40

>7.6912142205156999e+19

Кроме арифметических операций, можно использовать операции из модуля >math.

Примечание:

Для финансовых расчетов лучше применять более подходящий тип. 

Из полезных встроенных функций можно вспомнить >round(), >abs().

Тип complex

Литерал мнимой части задается добавлением >j в качестве суффикса (перемножаются мнимые единицы):

>>>> -1j * -1j

>(-1–0j)

Тип реализован на базе вещественного. Кроме арифметических операций, можно использовать операции из модуля >cmath.

Тип bool

Подтип целочисленного типа для «канонического» обозначения логических величин. Два значения: >True (истина) и >False (ложь) — вот и все, что принадлежит этому типу. Как уже говорилось, любой объект Python имеет истинностное значение, логические операции можно проиллюстрировать с помощью логического типа:

>>>> for i in (False, True):

>...  for j in (False, True):

>...   print i, j, ":", i and j, i or j, not i

>...

>...

>False False : False False True

>False True : False True True

>True False : False True False

>True True : True True False

Следует отметить, что Python даже не вычисляет второй операнд операции >and или >or, если ее исход ясен по первому операнду. Таким образом, если первый операнд истинен, он и возвращается как результат >or, в противном случае возвращается второй операнд. Для операции >and все аналогично.

Тип string и тип unicode

В Python строки бывают двух типов: обычные и Unicode–строки. Фактически строка — это последовательность символов (в случае обычных строк можно сказать «последовательность байтов»). Строки–константы можно задать в программе с помощью строковых литералов. Для литералов наравне используются как апострофы (


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.