Softerra Компьютерра | Ferrа | Инфо-Бизнес | Домашний компьютер | Game.exe 
Softerra - лучший русский сайт о софте
Rambler's Top100

 Статья рубрики "Linuxоид"

Python - основные концепции

Продолжение цикла статей об отличном языке программирования сверхвысокого уровня - Python. Кратко о том чем хорош язык. Чем он отличается от Java и Perl. Описания основных понятий языка: типов данных, объектов и ссылок.

[05.07.2001, Олег Бройтман, phd@phd.pp.ru]

Это вторая статья цикла лекций.

Введение

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

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно - с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl - Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Существует Русскоязычная Группа Пользователей Python и Zope. Сайт группы расположен по адресу http://zope.net.ru/. На список рассылки можно подписаться, послав по адресу majordomo@list.glas.net письмо с телом subscribe python.

Основные структуры управления

Python - вполне обычный, можно сказать, "традиционный" язык программирования. Все привычные конструкции в языке есть - условный оператор if, циклы for и while, функции, классы, модули, пакеты (иерархические совокупности модулей). Нет цикла do-while и оператора case.

Из менее традиционных операторов - возбуждение исключений raise и их перехват try-except-else и try-finally. Впрочем, исключения начинают занимать свое место и в других современных языках, так что чем-то революционным их назвать нельзя.

Для многих становится неожиданным, что в Питоне блочная структура обозначается отступами, а не словами begin/end (или скобками). К этому, однако, быстро привыкаешь, и это становится очень удобно.

Базовые типы данных

Для языка Python создано несколько интерпретаторов. В дальнейшем я буду говорить про основной интерпретатор CPython (интерпретатор, написанный на C).

В этом интерпретаторе базовые (встроенные) типы данных - целое, длинное целое, вещественное, комплексное числа, строки, списки, кортежи и словари.

Целое в Питоне соответствует типу long того компилятора C, которым скомпилирован интерпретатор. Длинное целое - это целое число потенциально бесконечной длины; с помощью таких чисел можно производить вычисления неограниченной разрядности; длинные целые эмулируются библиотекой, встроенной в интерпретатор. Вещественное соответствует типу double. Комплексные числа - это пара вещественных, записываемых в инженерной (а не математической) нотации: 21 + 12j.

Строки - просто последовательности символов. Строки бывают ASCII и Unicode, их можно перекодировать друг в друга. ASCII-строки можно также перекодировать в другую кодировку (например, koi8 <=> win1251)

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

Словари (ассоциативные массивы) - это отображения (mapping), сопоставляющие уникальному ключу произвольный объект. Ключом словаря может быть любой неизменяемый объект.

Изменяемые и неизменяемые объекты; адресная арифметика и ссылки

Объекты в Питоне бывают двух разновидностей - изменяемые и неизменяемые. Списки, например - объекты изменяемые, их содержимое и длину можно менять. Поскольку ключами словарей могут быть только неизменяемые объекты, в Питоне есть специальный тип неизменяемых списков - кортежи. Числа, естественно, объекты неизменяемые. Также неизменяемыми являются строки, в отличии от многих других языков программирования. Хотя классы, написанные программистами, порождают изменяемые объекты, у программиста есть возможность написать класс, экземпляры которого могут быть ключами словаря.

Адресной арифметики в Питоне нет. Вообще. Поэтому разименовать нулевой указатель просто невозможно. Ссылки (указатели) в Питоне есть, но манипулирование ими осуществляется прозрачно для программиста. В действительности все переменные в Питоне являются ссылками на объекты; поэтому, например, запись a = b означает "в переменную a скопировать ссылку из переменной b". Также списки и словари хранят не объекты, а ссылки на объекты. Присваивание и разыменование ссылок производится автоматически.

Каждый объект в Питоне хранит счетчик ссылок, и при таком копировании ссылки этот счетчик увеличивается. Счетчик же ссылок того объекта, на который переменная a указывала раньше - уменьшается. Когда счетчик достигает 0, объект считается неиспользуемым, для него вызывается деструктор (если это экземпляр класса с деструктором), и память объекта освобождается.

Такой механизм называется "синхронной сборкой мусора со счетчиком ссылок". Помимо него, в Питоне есть асинхронный сборщик мусора, достоинство которого в том, что он умеет распознавать циклические ссылки и очищать объекты, на которые нет других ссылок (не из цикла). (Пример циклических ссылок: l=[]; l.append(l))

Рассмотрим поподробнее питоновские ссылки. Создадим список и присвоим его (на самом деле присвоим ссылку на него) в переменную a: a = [21, 12, "str"]. Теперь присвоим ссылку из a в переменную b: a = b. Изменим список, на который ссылается a, скажем, добавим в него содержимое другого списка: a += [2000]. На какой список ссылается переменная b? На тот же, что и a - на список из 4 элементов. Происходит это потому, что b все еще хранит ссылку на тот же список, что и a. А теперь присвоим в a новый список: a = [12, 21]. Что теперь будет в b? А все тот же список из 4 элементов. Присваивание в a разорвало связь между a и b. В переменной a теперь ссылка на новый список, а в переменной b все та же ссылка на тот же список.

Если a - переменная, хранящая ссылку на список, и присваивание b = a копирует только ссылку на тот же список, то можно ли скопировать сам список? Короткий ответ - да, можно. Но не все так просто. Ведь и сам список хранит не объекты, а ссылки на объекты. Должны ли копироваться эти ссылки или должны быть продублированы и сами объекты? Питон дает два ответа на этот вопрос: можно сделать и так, и эдак. Первый вариант копирования называется "поверхностным", второй - "глубоким" копированием. Глубокое копирование учитывает циклические ссылки. Классы, написанные программистом, могут определять методы, участвующие в копировании, тем самым "помогая" процессу копирования, для того чтобы не включать в копирование лишней информации.

Манипуляции с неизменяемыми объектами осуществляются путем создания новых объектов. Например, если в строке надо заменить символ, исходная строка разбивается на две подстроки, и из них (плюс новый символ) создается новая строка. Если в переменной a ссылка на цело число, то в результате операции a += 1 в a окажется ссылка на новое число.


Обсудить статью в форуме

Почитать на ту же тему на нашем сайте:


<< Предыдущая статья рубрикиСледующая статья рубрики >>
("Об исконно русских дистрибутивах в текущем сезоне. Продолжение.")("Об исконно русских дистрибутивах в текущем сезоне. Окончание.")
Вернуться к оглавлению рубрики
Олег Бройтман
phd@phd.pp.ru
 
http://phd.pp.ru/

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта "Софтерра"


 Новые статьи на сайте

Просмотр DVD фильмов на FreeBSD

Несколько плееров для просмотра DVD в FreeBSD и немного теории

[29.10.2002, Станислав Лапшанский, "Linuxоид"]


Разбиение дисков и инсталляция Linux на LVM (часть 2)

Установка линукс на два диска с логическими томами...

[25.10.2002, Владимир Холманов, "Linuxоид"]


Домашняя фабрика грез. Часть 2

О представлении цветного изображения и прочем.

[24.10.2002, Алексей Стахнов, "Технологии"]


Более ранние статьи >>



 Новости софта

И защищает, и "расшаривает"... [17:58, 14.10.2002]

SolidShare - полезная программа для пользователей интернета


"Тощий" браузер [17:49, 14.10.2002]

Slim Browser 3.1 улучшает функциональность IE


Нужно-ненужная программа [16:05, 14.10.2002]

"Программа без особого назначения"


Более ранние новости >>



 Игры и мультимедиа. Новости

1с и Activision решили сотрудничать [18:06, 11.10.2002]

Фирма "1С" будет издавать серию игр от компании Activision в России, на территории стран СНГ и Балтии


Семнадцатый Чемпионат по онлайновым "СамоГонкам" [18:04, 11.10.2002]

В понедельник начнется настоящая игра


Распродажа пирамид [11:48, 10.10.2002]

"Пирамида. Gold Edition" в продаже


Более ранние новости >>



 Новости свободных систем

Lcrzo 4.16 [14:48, 16.10.2002]

Модифицированы некоторые модули...


KDE 3.1... забегая вперед [14:37, 16.10.2002]

Грядут большие перемены...


mnoGoSearch 3.2.7 [10:37, 15.10.2002]

Есть изменения...


Более ранние новости >>



 Пресс-релизы

Электронная цифровая подпись для Microsoft Office [15:43, 21.3.2002]

Компания MultiSoft анонсирует свою разработку – программный продукт «ЭЦП для Microsoft Office», обеспечивающую целостность и авторство электронных документов Word и Excel при их хранении и распространении через локальную или глобальную сеть.


Компания «БИФИТ» на форуме «Инфобизнес-2002» [14:14, 21.3.2002]

На проходившем с 12 по 15 марта форуме «Инфобизнес-2002» компания «БИФИТ» представила свою новую разработку iBank 2 - передовое решение для электронного банкинга.


Конвертирование позитива в негатив [13:16, 21.3.2002]

Группа разработчиков Invention Pilot, Inc выпустила новый программный продукт – Silver Pilot.


Более ранние новости >>






Информация о сервере
Copyright (c) 2000 ИД "Компьютерра"
Email: inform@softerra.ru
Телефон: (095) 232-22-63
Рейтинг@Mail.ru Создание сервера (с) 2000 Individ
Работает на Saitistika
Карта сайта
Главная страница