Язык программирования Python - Роман Сузи 5 стр.


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')

Функции - "украшатели" методов классов

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

Обзор стандартной библиотеки

Модули стандартной библиотеки можно условно разбить на группы по тематике.

1. Сервисы периода выполнения. Модули: sys, atexit, copy, traceback, math, cmath, random, time, calendar, datetime, sets, array, struct, itertools, locale, gettext.

2. Поддержка цикла разработки. Модули: pdb, hotshot, profile, unittest, pydoc. Пакеты docutils, distutils.

3. Взаимодействие с ОС (файлы, процессы). Модули: os, os.path, getopt, glob, popen2, shutil, select, signal, stat, tempfile.

3. Обработка текстов. Модули: string, re, StringIO, codecs, difflib, mmap, sgmllib, htmllib, htmlentitydefs. Пакет xml.

3. Многопоточные вычисления. Модули: threading, thread, Queue.

4. Хранение данных. Архивация. Модули: pickle, shelve, anydbm, gdbm, gzip, zlib, zipfile, bz2, csv, tarfile.

5. Платформо–зависимые модули. Для UNIX: commands, pwd, grp, fcntl, resource, termios, readline, rlcompleter. Для Windows: msvcrt, _winreg, winsound.

6. Поддержка сети. Протоколы Интернет. Модули: cgi, Cookie, urllib, urlparse, httplib, smtplib, poplib, telnetlib, socket, asyncore. Примеры серверов: SocketServer, BaseHTTPServer, xmlrpclib, asynchat.

7. Поддержка Internet. Форматы данных. Модули: quopri, uu, base64, binhex, binascii, rfc822, mimetools, MimeWriter, multifile, mailbox. Пакет email.

8. Python о себе. Модули: parser, symbol, token, keyword, inspect, tokenize, pyclbr, py_compile, compileall, dis, compiler.

9. Графический интерфейс. Модуль Tkinter.

Примечание:

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

Сервисы периода выполнения

Модуль sys

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

exit([c])Выход из программы. Можно передать числовой код завершения: 0 в случае успешного завершения, другие числа при аварийном завершении программы.
argvСписок аргументов командной строки. Обычно sys.argv[0] содержит имя запущенной программы, а остальные параметры передаются из командной строки.
platformПлатформа, на которой работает интерпретатор.
stdin, stdout, stderrСтандартный ввод, вывод, вывод ошибок. Открытые файловые объекты.
versionВерсия интерпретатора.
setrecursionlimit(limit)Установка уровня максимальной вложенности рекурсивных вызовов.
exc_info()Информация об обрабатываемом исключении.

Модуль copy

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

lst1 = [0, 0, 0]

lst = [lst1] * 3

print lst

lst[0][1] = 1

print lst

В результате получается, возможно, не то, что ожидалось:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

Дело в том, что список lst содержит ссылки на один и тот же список! Для того чтобы действительно размножить список, необходимо применить функцию copy() из модуля copy:

from copy import copy

lst1 = [0, 0, 0]

lst = [copy(lst1) for i in range(3)]

print lst

lst[0][1] = 1

print lst

Теперь результат тот, который ожидался:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

[[0, 1, 0], [0, 0, 0], [0, 0, 0]]

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

Назад Дальше