Выбрать главу

Следующий пример строит таблицу кодировки кириллических букв в 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() для аргумента, в котором присутствует непроверенный ввод от пользователя.

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