Твой софтовый форум > Global News > Новости, интересные факты и их обсуждение

Python

,

Язык как язык

Дата публикации: 19.02.2007 - 11:57
AHRIMAN
Что мы знаем о языках компьютера... Ниже приведены данные об одном из распространеных языков. Язык PYTHON



Python (пито́н, па́йтон) — интерпретируемый объектно-ориентированный язык программирования высокого уровня с динамической типизацией, автоматическим управлением памятью и удобными высокоуровневыми структурами данных, такими как словари (хэш-таблицы), списки, кортежи. Поддерживает классы, модули (которые могут быть объединены в пакеты), обработку исключений, а также многопоточные вычисления. Питон обладает простым и выразительным синтаксисом. Язык поддерживает несколько парадигм программирования: структурное, объектно-ориентированное, функциональное и аспектно-ориентированное.
Интерпретатор Питона существует для большинства распространённых платформ. Он распространяется свободно под очень либеральной лицензией, позволяющей использовать его без ограничений в коммерческих приложениях. Текущая версия 2.5 вышла 19 сентября 2006 года.
История
Питон создал в начале 1990-х сотрудник голландского института CWI Гвидо ван Россум (Guido van Rossum). Для распределенной ОС Amoeba требовался расширяемый сценарный язык, и Гвидо начал писать Питон на досуге, заимствовав некоторые наработки для языка АВС (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию). Затем язык начал свободно распространяться через Интернет и понравился другим программистам. С самого начала Питон проектировался как объектно-ориентированный язык. Питон также позаимствовал многие черты таких языков, как Си, Си++, Modula-3 и Icon, и отдельные черты функционального программирования из Лиспа.
.py

Название языка произошло вовсе не от вида пресмыкающихся. Автор назвал язык в честь популярного британского комедийного сериала 70-х годов «Воздушный цирк Монти Пайтона». Впрочем, всё равно название языка чаще ассоциируют именно со змеёй, нежели с фильмом — пиктограммы файлов в KDE или в Windows и даже эмблема на сайте python.org изображают змеиные головы.
Наличие дружелюбного, отзывчивого сообщества пользователей считается наряду с дизайнерской интуицией Гвидо одним из фактором успеха Питона. Развитие языка происходит согласно четко регламентированному процессу создания, обсуждения, отбора и реализации документов PEP (Python Enhancement Proposal) — предложений по развитию Питона см. [1].
Начата работа над Python 3000 — версией языка, в которой будут устранены многие недостатки в дизайне с максимально возможным сохранением совместимости со старыми версиями Питона.
Операторы
Набор операторов достаточно традиционен. Вот некоторые из них:
условный оператор if (если). Альтернативный блок после else (иначе). Если условий и альтернатив несколько, можно использовать elif (сокр. от else if).
оператор цикла while (пока).
оператор цикла for (для). Внутри цикла возможно применение break и continue для прерывания цикла и перехода сразу к следующей итерации соответственно.
оператор определения класса class.
оператор определения функции, метода или генератора def. Внутри возможно применение return (возврат), а в случае генератора — yield (давать).
оператор обработки исключений try - except - else или try - finally (Начиная с версии 2.5 можно использовать finally, except и else в одном блоке).
оператор pass ничего не делает. Используется для пустых блоков кода.
Одной из интересных синтаксических особенностей языка является выделение блоков кода с помощью отступов (пробелов или табуляций), поэтому в Питоне отсутствуют операторные скобки begin/end как в языке Паскаль или фигурные скобки, как в Си. Этот «трюк» позволяет заметно сократить количество строк и символов в программе:
Программа на C Эквивалентная программа на Python

int factorial(int x) {
if (x == 0) {
return 1;
} else {
return x * factorial(x-1);
}
}

def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x-1)



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

Выражения
Выражение является полноправным оператором в Питон. Состав, синтаксис, ассоциативность и приоритет операций достаточно привычны для языков программирования и призваны минимизировать употребление скобок.
Отдельно стоит упомянуть операцию форматирования для строк (работает по аналогии с sprintf() из Си), которая использует тот же символ, что и взятие остатка от деления:
>>> print "Здравствуй, %s!" % "Мир"
Здравствуй, Мир!

Питон имеет удобные цепочечные сравнения. Такие условия в программах — не редкость:

1 <= a < 10 and 1 <= b < 20

Кроме того, логические операции (or и and) являются «ленивыми»: если для вычисления истинностного значения достаточно первого операнда, этот операнд и является результатом (в противном случае вычисляется второй операнд). Этот факт широко использовался до версии 2.5 вместо условной конструкции:

(a < cool.gif and "меньше" or "больше"

Встроенные типы данных, как правило, имеют особый синтаксис для своих литералов (записанных в исходном коде констант):
"строка" + 'строка' #
"""тоже строка""" #
u"Юникод-строка" #
True or False # булевские литералы
3.14 # число с плавающей запятой
012 + 0xA # числа в восьмиричной и шестнадцатеричной системах счисления
1 + 2j # целое число и мнимое число
[1, 2, "a"] # список
(1, 2, "a") # кортеж
{'a': 1, 'b': 'B'} # словарь
lambda x: x**2 # неименованная функция

Для списков (и других последовательностей) Питон предлагает набор операций над срезами. Особенностью является индексация, которая может показаться новичку странной, но раскрывает свою согласованность по мере использования. Индексы элементов списка начинаются с нуля. Запись среза s[N:M] означает, что в срез попадают все элементы от N включительно до M исключительно. В качестве иллюстрации можно посмотреть этот пример.


Имена
Имя (идентификатор) может начинаться с латинской буквы любого регистра или подчеркивания, после чего в имени можно использовать и цифры. В качестве имени нельзя использовать ключевые слова (их список можно узнать по import keyword; print keyword.kwlist) и нежелательно переопределять встроенные имена. Имена, начинающиеся на подчеркивание, имеют специальное значение.
В каждой точке программы интерпретатор имеет доступ к трем пространствам имён: локальному, глобальному и встроенному. (Пространство имён — это отображение имён в объекты.)

Области видимости имён могут быть вложенными друг в друга (внутри определяемой функции видны имена из окружаещего блока кода). На практике с областями видимости и связыванием имен связано несколько правил «хорошего тона», о которых можно подробнее узнать из документации.
Другие возможности
В Python есть еще несколько возможностей, отличающих его от многих других языков высокой гибкостью и динамичностью.
В Питоне класс является объектом, а в операторе определения класса можно использовать выражения в списке родительских классов.

def getClass():
return dict
class D(getClass()):
pass
d = D()


Сравнение с другими языками
Наиболее часто Питон сравнивают с Perl и Ruby. Эти языки также являются интерпретируемыми и обладают примерно одинаковой скоростью выполнения программ. Как и Perl, Питон может успешно применяться для написания сценариев (скриптов). Как и Ruby, Питон является хорошо продуманной системой для ООП.
Средства функционального программирования частично позаимствованы из Scheme и Haskell.
В среде коммерческих приложений скорость выполнения программ на Питон часто сравнивают с Java-приложениями. Результаты одной из попыток сравнения можно найти здесь. В отличие от Java, CPython использует для управления памятью и подсчет ссылок, и «сборку мусора».
Несмотря на то, что Питон обладает достаточно самобытным синтаксисом, одним из принципов дизайна этого языка является принцип наименьшего удивления.

Недостатки

Низкое быстродействие
Питон, как и многие другие интерпретируемые языки, не применяющие, например, JIT-компиляторов, имеют один общий недостаток — сравнительно невысокую скорость выполнения программ. Однако, в случае с Питон считается, что этот недостаток с лихвой компенсируется уменьшением времени разработки программы и в сообществе Питон-программистов преобладает мнение, что на Питоне можно решить задачу в среднем в 3—5 раз быстрее чем на Си++ или Java. Стоит отметить, что в последних версиях CPython программы на Питоне выполняются значительно быстрее, чем в предыдущих. Сохранение байт-кода (файлы .pyc и .pyo) позволяет интерпретатору не тратить лишнее время на перекомпиляцию кода модулей при каждом запуске, в отличие, например, от языка Perl. Кроме того, существует специальная библиотека psyco [15], позволяющая несколько оптимизировать выполнение программ (однако приводящая к увеличению потребления оперативной памяти).
Нужно отметить, что уже существуют проекты реализаций языка Питон, вводящие высокопроизводительные виртуальные машины в качестве компилятора заднего плана. Примерами таких реализаций может служить PyPy, базирующийся на LLVM; более ранней инициативой является проект Parrot. Не без основания ожидается, что использование высокопроизводительных машин типа LLVM приведёт к тем же результатам, что и использование аналогичных подходов для реализаций языка Java, где т. н. низкая вычислительная производительность во основном преодолена.
Множество программ/библиотек для интеграции с другими языками программирования (см. выше) предоставляют возможность использовать другой язык для написания критических участков.
В самой популярной реализации языка Питон интерпретатор довольно велик и более требователен к ресурсам, чем в аналогичных популярных реализациях Tcl, Forth, LISP или Lua, что ограничивает его применение во встроенных системах. Тем не менее Питон нашёл применение в КПК и некоторых моделях мобильных телефонов.

Отсутствие статической типизации
Отсутствие статической типизации связанно не только с недостатком интерпретатора, но и с тем что в Python принята так называемая "Утиная типизация". Это приводит к невозможности контроля передаваемых типов компилятором и к ошибкам типа AttributeError во время исполнения, что является естественной расплатой за возможности динамической типизации. Отсутствие статической типизации также ответственно за низкую скорость (основная, но не единственная причина). Существуют модули, которые позволяют контролировать типы параметров, передаваемые в функции, но все они работают на этапе исполнения, например typecheck. Добавление опциональной статической типизации возможно в Python3000 см PEP-3100 и PEP-3107 ( опциональная типизация параметров функции ).
Отсутствие статической типизации и некоторые другие причины приводят к невозможности реализации в Python эффективного механизма перегрузки функций. Возможности Python позволяют реализовать динамическую перегрузку ( на этапе исполнения ). Однако это приводит к замедлению вызова так как разрешение производится при каждом обращении и является, в общем случае, довольно сложной процедурой. Отсутствие перегрузки в Python стараются компенсировать использованием виртуальных функций.

len = lambda x : x.__len__() # это только пример

Реализации и описание : [16], [17], пример реализации простой перегрузки так-же есть в примерах программ на Python. Планы по поддержке перегрузки в Python3000 PEP-3107.
Невозможность модификации встроенных классов
По сравнению с Ruby и некоторыми другими языками в Python отсутствует возможность модифицировать встроенные классы, такие как int, str, float, list и другие, что однако позволяет Python потреблять меньше оперативной памяти и быстрее работать. Дополнительной причиной проводящей к такому ограничения является невозможность согласовать такое поведение с C API, использующее для ускорения приведение встроенных типов к соответствующим C типам, вместо манипуляций непосредственно с Python int или str объектами.

Ссылки

Информация по различным аспектам языка
www.python.org — Официальный сайт языка Python
www.python.com.ua — Портал Python-программистов(на русском)
www.python.ru — Pусский сайт, посвящённый Python
Python 2.4 Quick Reference — Быстрое ознакомление с Питоном 2.4
Русские python Wiki — Python Wiki для русскоязычных пользователей
Python Wiki (на русском) — Русская версия Python Wiki
[color=blue]http://python.borda.ru
— Русскоязычный форум, посвященный языку Python

\
Информация с
http://ru.wikipedia.org/wiki/Python
biggrin.gif
de1ay
AHRIMAN,
Копирайт?
http://ru.wikipedia.org/wiki/Python
Оформление подкачало.
AHRIMAN
да я не отрицаю, просто у меня по этому разделу доклад был! а на оформление время не было! все мы от кудо то берем!
de1ay
AHRIMAN,
Глупый копи-паст не приветствуется. Оформи, пожалуйста, подобающи wink.gif
AHRIMAN
А так пойдет????


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Python
SoftoRooM © 2004-2024