Язык программирования Python (Сузи) - страница 21

Функция >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')

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

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