Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



Архив рассылки

    В нашей рассылке вы узнаете о новых статьях, программах, и темах на форуме. Рассылка выходит один раз в неделю, каждый четверг.
Подписаться на рассылку можно в этой форме:
Клуб программистов
Последний выпуск

12 выпуск

КЛУБ ПРОГРАММИСТОВ

в рассылке статьи, ссылки, инфо и многое другое о программировании и программистах

Новости

Лабораторные работы

Справочники

Книги

Основы Delphi

Клуб

Чат

Форум

От ведущего

Приветствую всех подписчиков на 12м выпуске рассылки "Клуб программистов" с одной очень интересной и очень важной новостью: У НАШЕГО КЛУБА НОВЫЙ ФОРУМ ! Да, именно так, старый форум был снесен из-за того, что он не устраивал клуб с технической стороны. А вот новый форум теперь является отдельным сайтом, его адрес: http://programmersforum.ru/ , у него свой отдельный адрес, однако он все равно является частью клуба .

В данный момент старый форум частично переносится на новый, чтобы интересные темы не пропадали, а так вы уже можете регистрироваться там и общаться!

Ну, а рассылка выпускается как обычно. Мне ничего не мешает сделать очередной выпуск! Сегодня мы поговорим о таком языке программирования, как Python, лично для меня раньше не известным. Так вот я сделал обзор на тему этого языка программирования, его истории. Читайте!

Ну и "Немного юмора" я тоже добавил. Кроме всего прочего я решил продолжить рассказывать о самых-самых участниках "Клуба программистов", поэтому смотрите ту рубрику.

__________________________________________________________

 

Что такое Python и с чем его едят

Что такое Python

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/ .

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

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

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

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

Модули - структурирование пространства имен

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

В Питоне 3 пространства имен: встроенное пространство имен (им можно управлять с помощью модуля доступа к интерпретатору sys), локальное пространство функции, и глобальное пространство модуля. (Объектно-ориентированное программирование создает дополнительные пространства классов и экземпляров классов, об этом ниже). Каждое пространство имен - это список отображений имени в значение.

Модуль - это совокупность описаний, объединенных в общее пространство имен - глобальное пространство модуля. Модули подключаются к программе (или другому модулю) с помощью оператора import, после которого имена из пространства имен модуля становятся доступными. Какие именно имена становятся доступны, определяет оператор import: вариант import module делает доступным ровно одно имя - имя модуля module, но зато через это имя можно использовать все глобальные имена модуля в виде module.name. В варианте from module import name из модуля импортируется указанное имя или список имен. В варианте from module import * из модуля импортируются все имена. Хотя автор модуля может ограничить этот список, а в отсутствии такого ограничения не импортируются имена, начинающиеся с подчеркивания - считается, что это внутренние имена модуля, не входящие в его публичный интерфейс.

Модуль может быть написан на Python, C или C++. Модули, написанные на Питоне, позволяют создавать новые классы (об объектно-ориентированном программировании речь будет идти ниже). Модули написанные на C и C++ позволяют создавать новые типы данных. Модули, написанные на C/C++ могут быть встроенные (builtin) или подгружаемые (DLL в Windows, разделяемые библиотеки в тех вариантах UNIX, в которых формат выполняемых файлов ELF).

Модуль на Питоне - это текстовый файл с расширением .py, содержащий описания переменных, функций и классов, плюс выполняемый код, который позволяет инициализировать модуль. Этот код выполняется при первом импорте модуля, после чего интерпретатор запоминает, что модуль уже проимпортирован и проинициализирован, и при последующих импортах этого же модуля код инициализации не выполняется.

Модули можно объединять в древовидные иерархии. Например, пакет XML содержит в себе пакеты DOM, SAX, Parsers (и другие, в зависимости от реализации). В результате можно проимпортировать PyExpat командой import xml.parsers.expat, тогда команды этого модуля будут доступны как xml.parsers.expat.ParserCreate, а можно проимпортировать его же командой from xml.parsers import expat, тогда команды этого модуля будут доступны как expat.ParserCreate. Или сразу from xml.parsers.expat import ParserCreate!

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

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

Адресной арифметики в Питоне нет. Вообще. Поэтому разименовать нулевой указатель просто невозможно. Ссылки (указатели) в Питоне есть, но манипулирование ими осуществляется прозрачно для программиста. В действительности все переменные в Питоне являются ссылками на объекты; поэтому, например, запись 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 окажется ссылка на новое число.

В обзоре использованы тексты: Олега Бройтмана, Другие статьи есть в нашем клубе .

__________________________________________________________

 

Почетные участники "Клуба программистов"

Arnold (Hallo)

Статьи:
Советы по созданию собственного сайта с нуля
Проведение конкурсов на сайте
Рассылка, зачем она нужна и как ее организовать?
Существует ли понятие плохого или хорошего дизайна
Немного о дизайне
Создание wap сайта – совсем не сложное дело!
редактор - преобразователь wml страниц

***

Gambler

С татьи:
Фракталы - геометрия природы

***

Zevs

Статьи:
Что нас ждёт в будущем ?  
Раскрутка сайтов.   Мнение админа о статье…
Развитие интернета
Всё гениальное просто
программы:
Игра ХакоМания
Самоучитель по Паскалю
Игра жизнь
Блокнот Paint

***

Andrei

программы:
Три кольца
RoadDistances

Вы тоже можете стать участником " Клуба программистов "

__________________________________________________________

 

Немного юмора

Анекоты сегодня не про компьютеры и даже не про программистов. Я решил рассказать вам самые простые, старые, но до сих пор актуальные и смешные анекдоты. Удачи!

***

Женатая пара едет по загородному шоссе. Никуда не торопятся, скорость -
километров 60. Муж за рулем. Жена, сидя справа, поворачивается к нему и говорит:
- Дорогой, мы женаты вот уже 15 лет, но сегодня я решила сказать тебе, что хочу
  развода.
Муж ничего не отвечает, только постепенно увеличивает скорость до 70 километров.
- И я не хочу, чтобы ты меня отговаривал, это уже решено. Я сплю с твоим лучшим
  другом, и он гораздо более хороший любовник, чем ты.
Опять муж ничего не отвечает, но увеличивает скорость до 80 километров в час.
- Я забираю у тебя наш дом.
Муж едет со скоростью 90.
- И детей.
Теперь на спидометре уже 100 километров.
- А также все твои деньги и машину.
Муж молчит, только постепенно начинает направлять машину к опоре ближайшего моста
на дороге.
- А тебе что-нибудь нужно? - спрашивает жена.
- Нет, у меня есть все, что нужно, - наконец отвечает муж.
- И что же?
И за секунду до того, как машина ударилась о бетонную стенку, он отвечает:
- Подушка безопасности.

***

- Вы уверены,что хотите удалить папку D:TEMP ?
- Да.
- В этой папке находятся файлы. Вы уверены, что хотите их удалить?
- Да!
- Удаление этих файлов может повлиять на зарегистрированные
  программы. Вы все еще уверены?
- Да! Да! Да!!! 
- Эти файлы могут использоваться системой. Вы уверены?
- Пошла ты нахуй! - заорал админ и нажал Cancel.
- Ага! Испугался! - подумала NT

***

В общем, ситуация классическая. Жена в постели с утомленным
любовником, неожиданно врывается муж. Жена кричит любовнику:
- Дорогой! Докажи ему, что ты настоящий мужчина!
Любовник:
- КАК? И ЕМУ ТОЖЕ?

***

Едут молодая мама с грудным ребенком в автобусе, а рядом сидит грузин.
Мама пытается покормить ребенка грудью, а ребенок отворачивается. Мама:
- Ну покушай, покушай! (Ребенок отворачивается...) А то отдам сисю тому
дяде! (Ребенок отворачивается...) Кушай, кушай, а то отдам сисю дяде!
Ребенок опять не хочет.
Грузин не выдерживает:
- Слишш девущка... Определайса, а то я уже третью остановку проезжаю!

Юмор от членов клуба программистов здесь . .

__________________________________________________________

 

Программистам на заметку

Если у вас есть желание поделиться своим опытом с читателями, вы являетесь обладателем ценных, интересных статей или авторских программ, а может вы просто хотите высказать свое мнение или замечание о рассылке, просто напишите мне . Я постараюсь уделить внимание каждому. А " Клуб программистов " всегда рад приветствовать в своих рядах новых пользователей.

 

© 2006, Кочари Арнольд и "Клуб программистов"