Язык программирования Python.

Встроенные функции.

В среде Python без дополнительных операций импорта доступно более сотни встроенных объектов, в основном, функций и исключений. Для удобства функции условно разделены по категориям:

1. Функции преобразования типов и классы: coerce, str, repr, int, list, tuple, long, float, complex, dict, super, file, bool, object.

2. Числовые и строковые функции: abs, divmod, ord, pow, len, chr, unichr, hex, oct, cmp, round, unicode.

3. Функции обработки данных: apply, map, filter, reduce, zip, range, xrange, max, min, iter, enumerate, sum.

4. Функции определения свойств: hash, id, callable, issubclass, isinstance, type.

5. Функции для доступа к внутренним структурам: locals, globals, vars, intern, dir.

6. Функции компиляции и исполнения: eval, execfile, reload, __import__, compile.

7. Функции ввода–вывода: input, raw_input, open.

8. Функции для работы с атрибутами: getattr, setattr, delattr, hasattr.

9. Функции-«украшатели» методов классов: staticmethod, classmethod, property.

10. Прочие функции: buffer, slice.

Совет: Уточнить назначение функции, ее аргументов и результата можно в интерактивной сессии интерпретатора Python: >>> help(len). Help on built–in function len: Len(...). Len(object) -> integer. Return the number of items of a sequence or mapping. Или так: >>> print len.__doc__ Len(object) -> integer. Return the number of items of a sequence or mapping.

Функции преобразования типов и классы.

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

>>> int(23.5).

23.

>>> float('12.345').

12.345000000000001.

>>> dict([('a', 2), ('b', 3)]).

{'a': 2, 'b': 3}.

>>> object.

<type 'object'>

>>> class MyObject(object):

... pass.

...

Числовые и строковые функции.

Функции работают с числовыми или строковыми аргументами. В следующей таблице даны описания этих функций.

abs(x) Модуль числа x. Результат: |x|.
divmod(x, y) Частное и остаток от деления. Результат: (частное, остаток).
pow(x, y[, m]) Возведение x в степень y по модулю m. Результат: x**y % m.
round(n[, z]) Округление чисел до заданного знака после (или до) точки.
ord(s) Функция возвращает код (или Unicode) заданного ей символа в односимвольной строке.
chr(n) Возвращает строку с символом с заданным кодом.
len(s) Возвращает число элементов последовательности или отображения.
oct(n), hex(n) Функции возвращают строку с восьмеричным или шестнадцатеричным представлением целого числа n.
cmp(x, y) Сравнение двух значений. Результат: отрицательный, ноль или положительный, в зависимости от результата сравнения.
unichr(n) Возвращает односимвольную Unicode–строку с символом с кодом n.
unicode(s, [, encoding[, errors]]) Создает Unicode–объект, соответствующий строке s в заданной кодировке encoding. Ошибки кодирования обрабатываются в соответствии с errors, который может принимать значения: 'strict' (строгое преобразование), 'replace' (с заменой несуществующих символов) или 'ignore' (игнорировать несуществующие символы). По умолчанию: encoding='utf–8', errors='strict'.

Следующий пример строит таблицу кодировки кириллических букв в Unicode:

Print "Таблица Unicode (русские буквы)".center(18*4).

I = 0.

For c in "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"\

         "абвгдежзийклмнопрстуфхцчшщъыьэюя":

 u = unicode(c, 'koi8–r').

 print "%3i: %1s %s" % (ord(u), c, `u`),

 i += 1.

  if i % 4 == 0:

   print.

Функции обработки данных.

Эти функции подробнее будут рассмотрены в лекции по функциональному программированию. Пример с функциями range() и enumerate():

>>> for i, c in enumerate("ABC"):

... print i, c.

...

0 A.

1 B.

2 C.

>>> print range(4, 20, 2).

[4, 6, 8, 10, 12, 14, 16, 18].

Функции определения свойств.

Эти функции обеспечивают доступ к некоторым встроенным атрибутам объектов и другим свойствам. Следующий пример показывает некоторые из этих функций:

>>> s = "abcde".

>>> s1 = "abcde".

>>> s2 = "ab" + "cde".

>>> print "hash:", hash(s), hash(s1), hash(s2).

Hash: — 1332677140–1332677140–1332677140.

>>> print "id:", id(s), id(s1), id(s2).

Id: 1076618592 1076618592 1076618656.

Здесь, можно увидеть, что для одного и того же строкового литерала "abcde" получается один и тот же объект, тогда как для одинаковых по значению объектов вполне можно получить разные объекты.

Функции для доступа к внутренним структурам.

В современной реализации языка Python глобальные и локальные переменные доступны в виде словаря благодаря функциям globals() и locals(). Правда, записывать что–либо в эти словари не рекомендуется.

Функция vars() возвращает таблицу локальных имен некоторого объекта (если параметр не задан, она возвращает то же, что и locals()). Обычно используется в качестве словаря для операции форматирования:

A = 1.

B = 2.

C = 3.

Print "%(a)s + %(b)s = %(c)s" % vars().

Функции компиляции и исполнения.

Функция reload() уже рассматривалась, а из остальных функций этой категории особого внимания заслуживает eval(). Как следует из названия, эта функция вычисляет переданное ей выражение. В примере ниже вычисляется выражение, которое строится динамически:

A = 2.

B = 3.

For op in "+-*/%":

 e = "a " + op + " b".

 print e, "->", eval(e).

У функции eval() кроме подлежащего вычислению выражения есть еще два параметра — с их помощью можно задать глобальное и локальное пространства имен, из которых будут разрешаться имена выражения. Пример выше, переписанный для использования с собственным словарем имен в качестве глобального пространства имен:

For op in "+-*/%":

 e = "a " + op + " b".

 print e, "->", eval(e, {'a': 2, 'b': 3}).

Функцией eval() легко злоупотребить. Нужно стараться использовать ее только тогда, когда без нее не обойтись. Из соображений безопасности не следует применять eval() для аргумента, в котором присутствует непроверенный ввод от пользователя.

Функции ввода–вывода.

Функции input() и raw_input() используются для ввода со стандартного ввода. В серьезных программах их лучше не применять. Функция open() служит для открытия файла по имени для чтения, записи или изменения. В следующем примере файл открывается для чтения:

F = open("file.txt", "r", 1).

For line in f:

 ...

F.close().

Функция принимает три аргумента: имя файла (путь к файлу), режим открытия (« r» — чтение, « w» — запись, « a» — добавление или « w+», « a+», « r+» — изменение. Также может прибавляться « t», что обозначает текстовый файл. Это имеет значение только на платформе Windows). Третий аргумент указывает режим буферизации: 0 — без буферизации, 1 — построчная буферизация, больше 1 — буфер указанного размера в байтах.

В новых версиях Python функция open() является синонимом для file().

Функции для работы с атрибутами.

У объектов в языке Python могут быть атрибуты (в терминологии языка C++ - члены–данные и члены–функции). Следующие две программы эквивалентны:

# первая программа:

Class A:

 pass.

A = A().

A.attr = 1.

Try:

 print a.attr.

Except:

 print None.

Del a.attr.

# вторая программа:

Class A:

 pass.

A = A().

Setattr(a, 'attr', 1).

If hasattr(a, 'attr'):

 print getattr(a, 'attr').

Else:

 print None.

Delattr(a, 'attr').

Функции — «украшатели» методов классов.

Эти функции будут рассмотрены в лекции, посвященной ООП.