Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

[ Россум, Дрейк, Откидач ] Язык программирования Python

.pdf
Скачиваний:
282
Добавлен:
25.04.2014
Размер:
1.5 Mб
Скачать

171

mod = __import__(name)

components = string.split(name, ’.’) for comp in components[1:]:

mod = getattr(mod, comp) return mod

abs(x)

Возвращает абсолютное значение аргумента. Для комплексных чисел возвращает x*x.conjugate(). Поведение функции abs() применительно к экземплярам определяется специальным методом __abs__() (см. раздел 11.6.3).

apply(object, args [, keywords])

Аргумент object должен быть объектом, поддерживающим вызов (см. раздел 11.4) и аргумент args должен быть последовательностью (если args не является кортежем, последовательность сначала преобразуется в кортеж). Необязательный аргумент keywords должен быть словарем, ключи которого являются строками. Возвращает результат вызова функции object с позиционными аргументами args и именованными аргументами keywords. Начиная с версии 1.6, тот же результат Вы можете получить, используя расширенную запись вызова: ‘object(*args, **keywords)’.

buffer(object [, offset[, size]])

Создает и возвращает объект buffer, который ссылается на object (см. раздел 11.2.5). object должен быть объектом, поддерживающим соответствующий интерфейс (string, unicode, array, buffer). Объект buffer представляет срез от offset (или от начала, если аргумент offset опущен) длиной size (до конца объекта object, если аргумент size опущен).

callable(object)

Возвращает истину, если аргумент object поддерживает вызов, иначе возвращает ложь (см. также раздел 11.4).

chr(i)

Возвращает строку, состоящую из одного символа, код которого равен i. Например, chr(97) возвращает строку ’a’. Аргумент i должен быть целым числом от 0 до 255 включительно, если i выходит за пределы указанного диапазона, генерируется исключение ValueError. Обратная операция выполняется функцией ord(). См. также описание функции unichr().

cmp(x, y)

Сравнивает объекты x и y и возвращает целое число: отрицательное, если x < y, ноль, если x == y, и положительное, если x > y.

coerce(x, y)

Пытается привести объекты x и y к общему типу используя такие же правила, как и для арифметических операций, и возвращает результат в виде кортежа из двух объектов. Если оба аргумента являются экземплярами класса, специальный метод __coerce__() вызывается только для первого.

172

Глава 12. Встроенные функции

compile(string, filename, kind)

Компилирует строку string и возвращает объект кода (см. раздел 11.9.1). Аргумент filename указывает имя файла, из которого создается объект кода. Используйте строку вида ’<ЙУФПЮОЙЛ>’, если исходный текст берется не из файла (например, ’<string>’). Аргумент kind указывает какого рода объект кода должен быть создан: используйте ’exec’, если string состоит из последовательности инструкций, ’eval’, если string содержит единственное выражение, или ’single’, если string содержит одну инструкцию для интерактивного режима (в последнем случае результат выполнения инструкции-выражения отличный от None будет выведен в стандартный поток вывода).

complex(real [, imag])

Преобразует аргумент числового типа real к комплексному типу, добавляет к нему imag*j (аргумент imag должен быть числового типа, по умолчанию равен нулю) или преобразует строку real в комплексное число (аргумент imag при этом игнорируется) и возвращает результат.

delattr(object, name)

Удаляет атрибут с именем name (строка) у объекта object, если объект позволяет это сделать. Например, вызов ‘delattr(x, ’foobar’)’ эквивалентен инструкции ‘del x.foobar’.

dir([object])

Без аргументов, возвращает список имен, определенных в локальной области видимости (с точностью до порядка следования, эквивалентно locals().keys()). С заданным аргументом, возвращает список атрибутов объекта object. Эта информация собирается из атрибутов объекта __dict__, __methods__ и __members__, если они определены. Заметим, что функция dir() выдает список лишь тех атрибутов, которые определены непосредственно для объекта object. Так, например, применительно к классу, не включаются атрибуты, определенные для базовых классов, а применительно к экземплярам, не включаются атрибуты класса. Имена в возвращаемом списке располагаются в алфавитном порядке.

divmod(a, b)

Возвращает кортеж из двух чисел1: целой части и остатка при делении a на b. К операндам применяются обычные правила приведения к общему типу, как и при выполнении других арифметических операций. Если оба операнда целые (int или long int), результат будет равен ‘(a / b, a % b)’. Для чисел с плавающей точкой результат будет равен ‘(q, a % b)’, где q (типа float) обычно равно ‘math.floor(a / b)’, но может быть на единицу меньше. В любом случае, значение выражения ‘q * b + a % b’ очень близко к a, а ‘a % b’ (если не равно нулю) имеет тот же знак, что и b. Кроме того, всегда выполняется условие ‘0 <= abs(a % b) < abs(b)’.

eval(expression [, globals [, locals]])

Строка expression разбирается и вычисляется ее значение как выражения на

1Могут быть произвольного типа, если a или b является экземпляром класса с методом __divmod__ и __rdivmod__ соответственно.

173

языке Python, используя словари globals и locals в качестве глобального и локального пространств имен. Если опущен аргумент locals, он считается равным globals. Если опущены оба необязательных аргумента, выражение вычисляется в том окружении, из которого была вызвана функция eval(). Возвращает результат вычисления выражения. Например:

>>>x = 1

>>>eval(’x+1’)

2

Функция может быть также использована для вычисления байт-компилированного с помощью функции compile() (аргумент kind должен быть равен ’eval’) выражения. В этом случае аргумент expression должен быть объектом кода.

См. также описание инструкции exec (раздел 10.3) и функций execfile(), globals() и locals().

execfile(file [, globals [, locals]])

Эта функция является аналогом инструкции exec, но обрабатывает файл вместо строки. От инструкции import она отличается тем, что не использует управление модулями — считывает файл независимо от каких-либо условий, не создает (и не использует) байт-компилированную версию файла и не создает объект-модуль.

Файл с именем file считывается, разбирается и выполняется как последовательность инструкций языка Python (аналогично модулям), используя словари globals и locals в качестве глобального и локального пространств имен. Если опущен аргумент locals, он считается равным globals. Если опущены оба необязательных аргумента, выражение вычисляется в том окружении, из которого была вызвана функция execfile().

filter(function, list)

Возвращает список из тех элементов последовательности list, для которых функция function (любой объект, поддерживающий вызов с одним аргументом, или None) возвращает истину. Если list является строкой (string) или кортежем, результат будет иметь тот же тип. В противном случае возвращаемое значение будет иметь тип list. Если аргумент function равен None, возвращаемый список будет содержать элементы последовательности list, являющиеся истиной.

float(x)

Преобразует строку или число (кроме комплексного) к вещественному типу и возвращает результат. Если аргумент является строкой, он должен содержать только десятичную запись целого или вещественного числа, заключенную, возможно, в символы пропуска (whitespace). Заметим, что ограничения, накладываемые на аргумент-строку, зависят от реализации библиотеки языка C. Экземпляры классов также могут быть преобразованы к вещественному типу, если для них определен специальный метод __float__.

getattr(object, name [, default])

Возвращает значение атрибута с именем name объекта object. Если object

174 Глава 12. Встроенные функции

не имеет атрибута с именем name (строка), возвращается значение необязательного аргумента default (если он задан) или генерируется исключение

AttributeError.

globals()

Возвращает словарь, представляющий глобальное пространство имен текущего модуля (внутри функции — это глобальное пространство имен модуля, в котором определена функция, а не тот, в котором она используется).

hasattr(object, name)

Возвращает 1, если объект object имеет атрибут с именем name (строка), иначе возвращает 0. Функция реализована следующим образом: производится попытка получить значение атрибута с указанным именем и, если генерируется (любое) исключение, то считается, что объект не имеет атрибута с таким именем.

hash(object)

Возвращает хэш-значение объекта object. Если для объекта не может быть получено хэш-значение, генерирует исключение TypeError. Хэш-значения используются для быстрого сравнения ключей при поиске в словарях. Равные объекты (в том числе и разного типа, например, 1 и 1.0) должны иметь равные хэш-значения.

hex(x)

Возвращает шестнадцатеричное представление целочисленного (int или long int) аргумента. Результат является правильным литеральным выражением языка Python (для длинного целого в конце будет добавлен суффикс ‘L’). Заметим, что результат всегда беззнаковый, например, на 32-разрядных платформах hex(- 1) дает ’0xffffffff’. При использовании результата в качестве литерального выражения на платформе с таким же размером слова, Вы получите -1. На платформах с другим размером слова Вы можете получить большое положительное число или будет сгенерировано исключение OverflowError.

id(object)

Возвращает идентификатор объекта object — целое число (типа int или long int). Гарантируется уникальность идентификатора на всем протяжении жизни объекта. Два объекта, промежутки времени существования которых не пересекаются, могут иметь одинаковые идентификаторы. В настоящее время идентификатор является адресом объекта.

input([prompt])

Эквивалентно eval(raw_input(prompt)) (запрашивает выражение, вычисляет и возвращает его значение).

int(x [, radix])

Преобразует строку или число (любого типа, кроме комплексного) x в простое целое (int). Если аргумент x является строкой, он должен содержать только десятичную запись целого числа, заключенную, возможно, в символы пропуска (whitespace). В этом случае, начиная с версии 1.6, Вы можете задать другое основание системы счисления radix (в более ранних версиях, Вы можете воспользоваться функцией string.atoi) от 2 до 36 включительно2 или 0. Если аргумент

210 цифр плюс 26 букв латинского алфавита.

175

radix равен нулю, основание системы исчисления (8, 10 или 16) определяется автоматически исходя из записи числа аналогично тому, как обрабатываются числовые литеральные выражения. Если задан аргумент radix, а x не является строкой, генерирует исключение TypeError. Преобразование вещественных чисел зависит от реализации библиотеки языка C. Обычно число округляется в сторону нуля3.

intern(string)

Добавляет строку string в специальную таблицу строк (если такой строки там не было) и возвращает тот же объект-строку или возвращает строку с таким же значением, ранее помещенную в эту таблицу. Это позволяет немного повысить производительность при поиске по ключу в словарях благодаря тому, что сравнение таких строк можно производить по идентификаторам (вместо обычного лексикографического сравнения). Эта процедура выполняется автоматически для всех имен, используемых в программах на языке Python, для ускорения поиска в словарях, представляющих пространства имен модулей, классов и экземпляров классов. Строки, помещенные в специальную таблицу, никогда не уничтожаются.

isinstance(object, class)

 

 

 

 

 

 

Возвращает

1, если object является

(прямо

или

косвенно)

экземпля-

ром

класса

class или

является

объектом типа

class, иначе возвраща-

ет

0. В первом случае

результат

будет

таким

же,

как и у

выражения

issubclass(object.__class__, class)’, во втором — таким же, как и у выражения ‘type(object) is class’. Если class не является объектом-классом или объектом-типом, генерирует исключение TypeError.

issubclass(class1, class2)

Возвращает 1, если класс class1 является (прямо или косвенно) производным от класса class2. Считается, что класс также является производным от самого себя. Если какой-либо аргумент не является объектом-классом, генерируется исключение TypeError.

len(object)

Возвращает длину (количество элементов) объекта. Аргумент может быть последовательностью, отображением или экземпляром класса, для которого определен специальный метод __len__().

list(sequence)

Возвращает список, составленный из элементов последовательности sequence. Порядок следования элементов сохраняется. Если последовательность sequence уже является списком, возвращается его копия (аналогично sequence[:]). Например, list(’abc’) возвращает [’a’, ’b’, ’c’], а list((1, 2, 3))

возвращает [1, 2, 3].

locals()

Возвращает словарь, представляющий локальное пространство имен. Не следует изменять его, внесенные изменения могут не отразиться на значениях локальных переменных, используемых интерпретатором.

3Такое поведение неприятно — определение языка должно требовать округления в сторону нуля.

176 Глава 12. Встроенные функции

long(x [, radix])

Преобразует строку или число (любого типа, кроме комплексного) x в длинное целое (long int). Если аргумент x является строкой, он должен содержать только десятичную запись целого числа (сразу после последней цифры может присутствовать символ ‘l’ или ‘L’), заключенную, возможно, в символы пропуска (whitespace). В этом случае, начиная с версии 1.6, Вы можете задать другое основание системы счисления radix (в более ранних версиях, Вы можете воспользоваться функцией string.atol) от 2 до 36 включительно или 0. Если аргумент radix равен нулю, основание системы исчисления (8, 10 или 16) определяется автоматически исходя из записи числа аналогично тому, как обрабатываются числовые литеральные выражения. Если задан аргумент radix, а x не является строкой, генерирует исключение TypeError. Преобразование вещественных чисел зависит от реализации библиотеки языка C. Обычно число округляется в сторону нуля. См. также описание функции int().

map(function, seq ...)

Последовательно применяет function (любой объект, поддерживающий вызов, или None) к каждому элементу последовательности seq и возвращает список результатов. Функции map() может быть передано более одной последовательности. В этом случае количество воспринимаемых объектом function аргументов должно быть равным количеству переданных последовательностей. Если один или несколько списков окажутся короче других, недостающие элементы будут считаться равными None. Если значение аргумента function равно None, подразумевается функция, возвращающая свой аргумент (для одной последовательности) или кортеж своих аргументов (для нескольких последовательностей). Аргументыпоследовательности могут быть любого типа, результат всегда будет иметь тип list.

max(seq) max(v1, v2 ...)

С единственным аргументом seq, возвращает наибольший элемент последовательности. Если последовательность пустая, генерируется исключение ValueError. Если задано несколько аргументов, возвращает наибольший из них.

min(seq) min(v1, v2 ...)

С единственным аргументом seq, возвращает наименьший элемент последовательности. Если последовательность пустая, генерируется исключение ValueError. Если задано несколько аргументов, возвращает наибольший из них.

oct()

Возвращает восьмеричное представление целого (int или long int) аргумента. Результат является правильным литеральным выражением языка Python (для длинного целого в конце будет добавлен суффикс ‘L’). Заметим, что результат всегда беззнаковый, например, на 32-разрядных платформах oct(-1) дает ’037777777777’. См. также описание функции hex().

open(filename [, mode [, bufsize]])

Открывает файл и возвращает соответствующий ему файловый объект (см. раздел

177

11.7). filename — имя файла, mode — строка, указывающая, в каком режиме файл будет открыт. Возможные режимы: ’r’ — для чтения (файл должен существовать), ’w’ — для записи (если файл не существует, он создается, в противном случае его содержимое удаляется), ’a’ — для добавления в конец файла (если файл не существует, он создается; текущее положение в файле устанавливается указывающим на его конец; на некоторых платформах метод seek() игнорируется), ’r+’, ’w+’ и ’a+’ — для чтения и записи (для открытия в режиме ’r+’ файл должен существовать, в режиме ’w+’ содержимое существующего файла удаляется). При добавлении символа ‘b’ к режиму гарантируется, что файл будет открыт в двоичном режиме. На некоторых платформах файлы по умолчанию открываются в текстовом режиме, в котором операционная система автоматически заменяет некоторые символы. Во избежание возможной порчи данных лучше всегда принудительно выставлять двоичный режим (даже на платформах, где файл по умолчанию открывается в двоичном режиме — подумайте о переносимости Ваших программ). Если файл не может быть открыт, генерируется исключение IOError. Если аргумент mode опущен, он считается равным ’r’.

Необязательный целый аргумент bufsize указывает желаемый размер буфера: 0 означает отсутствие буферизации, 1 — построчная буферизация, любое другое положительное число означает буфер (примерно) указанного размера. Если bufsize опущен или меньше нуля, используется системное значение по умолчанию4: обычно построчная буферизация для устройств tty и довольно большое значение для других файлов.

ord(c)

Возвращает код символа. Аргумент c должен быть строкой (string или unicode), состоящей из одного символа. Например, ord(’a’) возвращает 97, ord(u’\u2020’) возвращает 8224. Обратное преобразование может быть выполнено с помощью функций chr() для обычных символов и unichr() для символов Unicode.

pow(x, y [, z])

С двумя аргументами возвращает x в степени y (эквивалентно ‘x ** y’). С заданным третьим аргументом, результат будет такой же, как и у выражения ‘pow(x, y) % z’, однако вычисление производится более эффективно. Со смешанными типами операндов, применяются обычные правила для арифметических операций. Эффективный тип операндов также является и типом результата. Если результат не может быть выражен в рамках этого типа, генерируется соответствующее ситуации исключение. Например, pow(2, -1) генерирует исключение

ValueError, а pow(2, 35000) генерирует исключение OverflowError.

range([start,] stop [, step])

Эта гибкая функция создает и возвращает арифметическую прогрессию от start (включительно; по умолчанию 0) до stop (исключая само значение stop) с шагом step (по умолчанию 1; если задан шаг, аргумент start становится обязательным). Все аргументы должны быть простыми целыми (int), если аргумент

4На системах, библиотека языка C которых не имеет функцию setvbuf(), размер буфера, независимо от bufsize, будет иметь значение по умолчанию.

178

Глава 12. Встроенные функции

step равен нулю, генерируется исключение ValueError. Если step — положительное число, последним элементом списка будет наибольшее число из ряда start + i * step, которое меньше, чем stop (i — натуральное число или ноль). Если step — отрицательное число, последним элементом списка будет наименьшее число из ряда start + i * step, которое больше stop. Несколько примеров:

>>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1, 11)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>>range(0, 30, 5) [0, 5, 10, 15, 20, 25]

>>>range(0, 10, 3) [0, 3, 6, 9]

>>>range(0, -10, -1)

[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

>>>range(0)

[]

>>>range(1, 0)

[]

raw_input([prompt])

Если задан аргумент prompt, его значение (точнее строковое представление, полученное аналогично тому, как это делают функция str() и инструкция print) выводится на стандартный поток вывода (в отличие от инструкции print, символ новой строки в конце не добавляется). Функция считывает строку из стандартного потока ввода и возвращает ее (исключая завершающий символ перехода на новую строку). Если при считывании достигается конец файла, генерируется исключение EOFError. Например:

>>> s = raw_input(’--> ’)

--> Monty Python’s Flying Circus

>>> s

"Monty Python’s Flying Circus"

Если загружен модуль readline, функция raw_input() будет использовать его, предоставляя возможности редактирования строки и использования истории введенных строк (некоторые операционные системы, например Windows NT, предоставляют аналогичные возможности автоматически).

reduce(function, sequence [, initializer])

Последовательно применяет function (объект, поддерживающий вызов с

двумя аргументами) сначала к двум

первым

элементам

последовательно-

сти sequence, затем к результату и

третьему

элементу

и т. д. Напри-

мер, ‘reduce(operator.__add__, [1, 2, 3, 4, 5])’ вычисляет сумму

((((1+2)+3)+4)+5). Если задан необязательный аргумент initializer, при вычислении он помещается перед первым элементом. Если общее количество элементов (initializer, если он задан, плюс элементы последовательности

179

sequence) равно 1, возвращается его (единственного элемента) значение, если общее количество элементов равно 0 (то есть не задан аргумент initializer и используется пустая последовательность), генерируется исключение TypeError.

reload(module)

Заново считывает и инициализирует уже импортированный модуль. Аргумент module должен быть объектом-модулем, представляющим ранее успешно импортированный модуль. Возвращает объект-модуль (тот же самый, что и module). Эта функция может быть полезна при одновременном редактировании и тестировании в интерактивном режиме (не покидая интерпретатора) модулей.

Если в исходном тексте модуля нет синтаксических ошибок, но они возникают во время его инициализации, первая инструкция import для этого модуля не создаст соответствующую ему локальную переменную, а лишь сохранит (частично инициализированный) объект-модуль в sys.modules. Для того, чтобы перезагрузить модуль, необходимо сначала повторно импортировать с помощью инструкции import (при этом создается локальная переменная, ссылающаяся на частично инициализированный объект-модуль) и лишь затем использовать функцию reload().

При перезагрузке модуля старый словарь, представляющий глобальное пространство имен модуля сохраняется. Новые определения перезаписывают старые, так что это обычно не вызывает проблем. Если новая версия не определяет какое-либо имя, для него остается прежнее значение. Эта особенность может быть использована модулем, если он поддерживает глобальную таблицу или кэш объектов: с помощью инструкции try Вы можете определить наличие таблицы и, при желании, пропустить ее инициализацию.

Перезагрузка встроенных и динамически связываемых модулей в принципе допустима (кроме модулей sys, __main__ и __builtin__), однако не настолько полезна. Некоторые дополнительные модули, однако, не приспособлены к повторной инициализации, что может привести к всевозможным ошибкам.

Если Вы импортируете объекты из модуля, используя инструкцию ‘from ...

import ...’, перезагрузка модуля не приведет к переопределению этих объек-

тов — после перезагрузки необходимо повторно выполнить инструкцию ‘from ...

import ...’.

Если Вы определили экземпляры класса, перезагрузка модуля, в котором определен класс, не изменит определения методов для экземпляров — они будут продолжать использовать старые определения. То же самое верно и для производных классов.

repr(object)

Возвращает строку, содержащую представление объекта object. Тот же эффект Вы можете получить, заключив выражение object в обратные кавычки (‘object‘). По возможности функция repr() возвращает строку, пригодную для восстановления объекта с тем же значением с помощью функции eval(). См. также описание функции str().

round(x [, n])

Возвращает вещественное число, полученное округлением x до n цифр после десятичной точки. По умолчанию n считается равным нулю. То есть возвращает

180

Глава 12. Встроенные функции

ближайшее к x число, кратное 10 n. Из двух одинаково близких чисел выбирается то, которое находится дальше от нуля (то есть round(0.5) дает 1.0 и round(-0.5) дает -1.0).

setattr(object, name, value)

Присваивает атрибуту с именем name (строка) объекта object значение value. name может быть именем уже существующего или нового атрибута. Например, вызов ‘setattr(x, ’foobar’, 123)’ эквивалентен инструкции ‘x.foobar = 123’.

slice([start,] stop [, step])

Возвращает объект среза (см. раздел 11.8.3). Если какой-либо необязательный аргумент опущен, используется None для обозначения значения по умолчанию.

str(object)

Возвращает строковое представление, наиболее пригодное для вывода. В отличие от repr(), функция str() даже не пытается создать строку, являющуюся правильным выражением языка Python. Точно такое представление используется для объектов при выводе их с помощью инструкции print.

tuple(sequence)

Возвращает кортеж, составленный из элементов последовательности sequence. Порядок следования элементов сохраняется. Если последовательность sequence уже является кортежем, он возвращается без изменений (нет смысла создавать его копию, так как кортежи являются неизменяемыми объектами) . Например, tuple(’abc’) возвращает (’a’, ’b’, ’c’), а tuple([1, 2, 3]) возвращает (1, 2, 3).

type(object)

Возвращает тип объекта object. Возвращаемое значение является объектом типа (см. раздел 11.8.2). В стандартном модуле types определены имена для всех встроенных типов. Например:

>>>import types

>>>if type(x) == types.StringType:

... print "пВЯЕЛФ x СЧМСЕФУС УФТПЛПК"

unichr(i)

Возвращает строку Unicode, состоящую из одного символа, код которого равен i. Например, unichr(97) возвращает строку u’a’. Аргумент i должен быть целым числом от 0 до 65535 включительно, если i выходит за пределы указанного диапазона, генерируется исключение ValueError. Обратная операция выполняется функцией ord(). См. также описание функции chr().

unicode(string [, encoding [, errors]])

Преобразует строку string из кодировки encoding (по умолчанию ’utf-8’) в строку Unicode и возвращает результат. Поведение при возникновении ошибок определяется значением аргумента errors: ’strict’ (используется по умолчанию) означает, что при возникновении ошибки будет сгенерировано исключение