Листинг
try:
finally:
print «Обработка гарантированно завершена»
Смешивать вместе формы tryexcept и tryfinally нельзя.
Встроенные типы данных
Как уже говорилось, все данные в 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 15
>>> 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 'int'>
>>> type(-2147483649)
<type 'long'>
Также нужно быть осторожным при записи констант. Нули в начале числа признак восьмеричной системы счисления, в которой нет цифры 8:
Листинг
>>> 008
File "<stdin>", line 1
008
^
SyntaxError: invalid token
Тип float
Соответствует Cтипу double для используемой архитектуры. Записывается вполне традиционным способом либо через точку, либо в нотации с экспонентой:
Листинг
>>> pi = 3.1415926535897931
>>> pi ** 40
7.6912142205156999e+19
Кроме арифметических операций, можно использовать операции из модуля math.
Примечание:
Для финансовых расчетов лучше применять более подходящий тип.
Из полезных встроенных функций можно вспомнить round(), abs().
Тип complex
Литерал мнимой части задается добавлением j в качестве суффикса (перемножаются мнимые единицы):
Листинг
>>> -1j * -1j
(-10j)
Тип реализован на базе вещественного. Кроме арифметических операций, можно использовать операции из модуля 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строки. Фактически строка это последовательность символов (в случае обычных строк можно сказать «последовательность байтов»). Строкиконстанты можно задать в программе с помощью строковых литералов. Для литералов наравне используются как апострофы ('), так и обычные двойные кавычки ("). Для многострочных литералов можно использовать утроенные апострофы или утроенные кавычки. Управляющие последовательности внутри строковых литералов задаются обратной косой чертой (\). Примеры написания строковых литералов: