Python

Python
Семантика: императивный, функциональный
Тип исполнения: интерпретатор
Появился в: 1990 г.
Автор(ы): Гвидо ван Россум
Типизация данных: строгая, динамическая
Основные реализации: CPython, Jython, IronPython, PyPy
Диалекты: отсутствуют
Создан под влиянием: ABC, Perl, Lisp, Smalltalk, Tcl
Оказал влияние на: Ruby, Boo

Python (пито́н, па́йтон) — интерпретируемый, интерактивный, объектно-ориентированный язык программирования высокого уровня. Поддерживает классы, модули (которые могут быть объединены в пакеты), обработку исключений, а также многопоточную обработку. Питон относится к классу языков с динамической типизацией, обеспечивает «сборку мусора» и удобные высокоуровневые структуры данных, такие как словари (хэш-таблицы), списки, кортежи. Питон обладает простым и мощным синтаксисом.

Интерпретатор Питона существует для большинства распространённых платформ. Он распространяется свободно под очень либеральной лицензией [1], позволяющей использовать его без ограничений в коммерческих приложениях. Текущая версия 2.5 вышла 19 сентября 2006 года.

Содержание

Идеология

Вольный перевод Дзэна Питона (автор Тим Пейтерс):

  • Красивое лучше уродливого.
  • Явное лучше неявного.
  • Простое лучше сложного.
  • Сложное лучше усложнённого.
  • Последовательное лучше вложенного.
  • Разрежённое лучше, чем плотное.
  • Удобочитаемость существенна.
  • Частные случаи не настолько существенны, чтобы нарушать правила.
  • Однако практичность важнее регулярности.
  • Ошибки никогда не должны умалчиваться.
  • Если явно не указано умалчивать.
  • В случае неоднозначности сопротивляйтесь искушению угадать.
  • Должен существовать один — и, желательно, только один — очевидный способ.
  • Хотя он может быть с первого взгляда неочевиден, если ты не голландец (намёк на Гвидо ван Россума)
  • Сейчас лучше, чем никогда.
  • Но никогда часто бывает лучше, чем прямо сейчас.
  • Если реализацию идеи тяжело объяснить, она плоха.
  • Если реализацию идеи легко объяснить, она может быть хороша.
  • Пространства имён — великолепная идея, их должно быть много!

Английский (оригинальный) вариант «Дзэна Питона» выдаётся интерпретатором Питона по команде import this (работает один раз).

История

Питон создал в начале 1990-х сотрудник голландского института CWI Гвидо ван Россум (Guido van Rossum), который участвовал в разработке языка АВС. Язык был предназначен заменить Бейсик, который тогда применялся при обучении программированию. Гвидо начал писать Питон дома, заимствовав некоторые наработки для языка АВС. Затем язык начал свободно распространяться через Интернет и понравился другим программистам. С 1991 года Питон является полностью объектно-ориентированным. Питон также позаимствовал многие черты таких языков, как Си, Си++, Modula-3 и Icon, и отдельные черты функционального программирования из Лиспа.

Название языка произошло вовсе не от вида пресмыкающихся. Автор назвал язык в честь популярного британского комедийного сериала 70-х годов «Воздушный цирк Монти Пайтона». Впрочем, всё равно название языка чаще ассоциируют именно со змеёй, нежели с фильмом — пиктограммы файлов в KDE или в Windows и даже эмблема на сайте python.org изображают змеиную голову.

Портируемость

Питон портируем и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Windows, все варианты UNIX (включая Linux), Plan 9 , Mac OS и Mac OS X, Palm OS, OS/2, Amiga, AS/400 и даже OS/390 и Symbian.

При этом, в отличие от многих портируемых систем, на каждой платформе Питон поддерживает все характерные для данной платформы технологии (например, Microsoft COM/DCOM). Более того, существует специальная версия Питона для виртуальной машины Java — Jython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Питона и даже быть написанными на питоне. Не так давно началась разработка системы, предназначенной для более полной интеграции с платформой .NET — Iron Python.

Типы и структуры данных

Python поддерживает динамическую типизацию, то есть, тип переменной определяется только во время исполнения. Из базовых типов стоит отметить поддержку целых чисел произвольной длины и комплексных чисел. Python имеет богатую библиотеку для работы со строками, в том числе, Unicode.

Из коллекций Python поддерживает кортежи (tuples), списки (массивы), словари (ассоциативные массивы) и, начиная с версии 2.4, множества.

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

Синтаксис

Программы, написанные на Питоне, легко читаемы. Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью. Одной из интересных синтаксических особенностей языка является выделение блоков программы с помощью отступов (пробелов или табуляций), поэтому в Питоне отсутствуют операторные скобки 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)
 
 

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

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

Функциональное программирование

Python предлагает средства для программирования в функциональном стиле. Простейшими из них являются списочные выражения (list comprehension). Например, чтобы получить список квадратов натуральных чисел, меньших 10, можно использовать выражение

l=[x**2 for x in range(10)]

Кроме того, поддерживаются лямбда-выражения (неименованные функции):

add2=lambda x: x+2

после чего add2(5)==7. Такие конструкции полезны, например, как аргументы в функциональных выражениях: filter(lambda x: x<5, somelist) выберет из списка somelist только значения, меньшие 5. Того же результата можно добиться с помощью спискового выражения [x for x in somelist if x<5]. Лямбда-выражения, как и любые другие функции, могут создаваться внутри других функций, тем самым, представляя собой полноценные замыкания (англ. closures):

def multiplier(n):
    "multiplier(n) возвращает функцию, умножающую на n"
    # ^- это строка документации
    def mul(k):
        return n*k
    return mul
# того же эффекта можно добиться выражением
# multiplier=lambda n: lambda k: n*k
mul2=multiplier(2) # mul2 - функция, умножающая на 2, например, mul2(5)==10

Генераторы

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

Пример генератора, выдающего числа Фибоначчи, и его использования:

def gen_fibonacci(max=sys.maxint):
    a=0
    b=1
    while a<max:
        yield a
        a,b = b,a+b
for n in gen_fibonacci(1000): # напечатать все числа Фибоначчи <1000
    print n

Пример также показывает одновременное присваивание, которое позволяет обойтись без временных переменных.

Библиотеки

Стандартная библиотека

Одна из самых сильных сторон Питона — очень богатая стандартная библиотека. Особенно хорошо разработаны средства для работы с протоколами и форматами интернета — имеются модули для написания HTTP-серверов и клиентов, для разборки и создания почтовых сообщений, для работы с XML и т. п. Набор модулей для работы с операционной системой позволяет писать кроссплатформенные приложения. Существуют также модули для работы с регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами и др.

Расширения

Если недостаточно возможностей стандартной библиотеки, то существует множество библиотек, предоставляющих интерфейс ко всем мыслимым системным вызовам на разных платформах; в частности, на платформе Win32 поддерживаются все вызовы Win32 API, а также COM в объёме не меньшем, чем у Visual Basic или Delphi. Кроме того, количество прикладных библиотек для Python в самых разных областях без преувеличения огромно (веб, базы данных, обработка изображений, обработка текста, численные методы, приложения операционной системы, и т. д.)

Для Python существуют библиотеки доступа к СУБД (на платформе Windows доступ к БД возможен через ADO). Существуют модули расширения для Python под Windows и Unix/Linux для доступа к PostgreSQL, Oracle Database, Sybase, Informix, Microsoft SQL Server и MySQL. Существует также пакет mxODBC для доступа к СУБД через ODBC, также поддерживаемый на платформах Windows и Юникс.

Библиотека Numeric Python для работы с многомерными массивами позволяет достичь производительности научных расчётов, сравнимой с MATLAB.

Питон предоставляет простой и удобный программный интерфейс для написания собственных модулей на языках Си и Си++, а на платформе Windows — также с помощью COM.

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

Графические библиотеки

С Питоном поставляется библиотека tkinter на основе Tcl/Tk для создания кроссплатформенных программ с графическим интерфейсом. Данная библиотека является фактически стандартом для GUI-приложений, написанных на Питоне.

Однако в силу разных причин всё больше людей при написании GUI программ отдают предпочтение библиотеке wxPython (wxPython), основанной на библиотеке wxWidgets. Также часто используются библиотеки PyQT (PyQt) и PyGTK.

Для создания игр и различных приложений требующих нестандартного интерфейса удобным является использование библиотеки Pygame ([2]). Стоит заметить, что pygame это не только графическая библиотека, с её помощью можно управлять звуком и изображениями, воспроизводить видео. С помощью данной библиотеки на Питоне можно создавать приложения использующие аппаратное ускорение графики OpenGL.

Пример программы

Эта программа демонстрирует некоторые возможности языка Python. Все используемые средства имеются в стандартной библиотеке.

import string                           # импортируем модуль для работы со строками
from urllib2 import urlopen             # из модуля urllib2 импортируем функцию urlopen
    
u=urlopen("http://ru.wikipedia.org")    # открываем URL на чтение
words={}                                # присваиваем переменной words пустой словарь
                                        # словарь — неупорядоченный ассоциативный массив
for line in u.readlines():              # читаем u по строкам
    line=string.strip(line," \n")       # выбрасываем начальные и конечные пробелы
    for word in line.split(" "):        # режем каждую строку на слова, ограниченные пробелами
        try:                            # блок обработки исключений
            words[word] += 1            # пытаемся увеличить words[word] на единицу
        except KeyError:                # если не получилось (раньше words[word] не было)
            words[word] = 1             # присваиваем единицу
     
# в этом месте у нас есть словарь words, в котором для каждого слова сосчитано, 
# сколько раз оно встречается.  Например, переменная words может быть равна
# {"яблоко":5, "апельсин": 12, "груша": 8}
     
pairs=words.items()                     # делаем из словаря список пар
                                        # pairs=[("яблоко",5), ("апельсин",12), ("груша",8)]
pairs.sort(lambda a,b: b[1]-a[1])       # сортируем по убыванию второго элемента пары
   
for p in pairs[:10]:                    # и печатаем первые 10 элементов
    print p[0],p[1]

Недостатки

Как и любой интерпретируемый язык, Питон обладает одним недостатком — сравнительно малой скоростью выполнения программ, однако этот недостаток компенсируется уменьшением времени разработки программы — считается что на Питоне программист может решить задачу в среднем в 3—5 раз быстрее чем на Си++ или Java. Впрочем, в последних версиях программы на Питоне выполняются значительно быстрее, чем в предыдущих. А сохранение байт-кода позволяет не тратить лишнее время на компиляцию кода заново при каждом запуске, в отличие, например, от языка Perl. Кроме того, существует специальная библиотека psyco [3], позволяющая оптимизировать выполнение некоторых программ, после чего скорость их выполнения можно сравнивать с программами на Си.

Интерпретатор довольно большой по размерам и более требователен к ресурсам, чем Tcl, Forth, LISP или Lua, что ограничивает его применение во встроенных системах. Тем не менее Питон нашёл применение в КПК и некоторых моделях мобильных телефонов.

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

Интерактивный режим

Как LISP, Prolog или Perl, в режиме отладки интерпретатор Питона поддерживает интерактивный режим работы с программой, когда введённые с клавиатуры выражения сразу же выполняются и выводит на экран результат своей работы. Этот режим интересен не только новичкам, но и опытным программистам, которые могут протестировать в интерактивном режиме любой участок кода, прежде чем использовать его в основной программе, или просто использовать как калькулятор с большим набором функций.

Существует улучшенный интерактивный шелл IPython.

Сходство с другими языками

Очень часто питон сравнивают с такими языками как Perl и Ruby. Эти языки также являются интерпретируемыми и обладают примерно одинаковой скоростью выполнения программ.

Средства функционального программирования частично позаимствованы из Scheme и Haskell.

Питон — одно из самых простых средств обучению и применению ООП. Часто является как первым (для обучения), так и последним (в череде используемых опытными программистами) языком программирования.

Использование

Питон — стабильный и распространённый язык. Он используется во многих проектах, в качестве основного языка реализации, либо вспомогательного, для программирования различных расширений к основной программе.

Проекты, реализованные на Питоне

Веб-программирование

  • Zope — сервер для построения CMS, порталов и собственных видов веб-приложений, а также платформа для их разработки
  • Django — среда для разработки веб-приложений
  • Turbogears — среда для разработки веб-приложений
  • CherryPy — среда для разработки веб-приложений
  • Webware — среда для разработки веб-приложений
  • Plone — система управления содержимым вебсайтов (CMS)
  • Mailman — популярная программа для работы со списками рассылки
  • MoinMoin - вики-движок для интранета и интернета
  • PlanetPlanet - Движок для синдикации rss-потоков

Графика

  • Skencil — многоплатформенный редактор векторной графики для unix-систем

Разработка ПО

  • Buildbot — система для управления сборкой исходных текстов
  • Trac — викивики и багтрекер интегрированные с системой управления версиями Subversion
  • ViewCVS — программа для просмотра репозиториев CVS через веб-браузер
  • Bazaar NG - система управления версиями п/о (RCS)
  • Codeville - система управления версиями п/о (RCS)

Другие области применения

  • BitTorrent — один из протоколов файлообменных сетей
  • Portage — система пакетов, используемая Gentoo Linux
  • Anaconda — инсталлятор операционной системы Fedora/RedHat Linux и некоторых других дистрибутивов базирующихся на RedHat (написан с использованием Python, C, PyGTK)

Проекты, использующие Питон (Питон как скриптовый язык)

  • Википедия использует Питон для написания ботов
  • Civilization IV - популярная стратегическая игра.
  • Blender — кросплатформенный 3D редактор, Питон использован для поддержки скриптов-плагинов
  • Vim — текстовый редактор, предоставляет богатый API для автоматизации и расширения функциональности
  • WinCVS — GUI для работы с системой CVS в ОС Windows, использует Питон для поддержки скриптов
  • Среда рабочего стола GNOME использует Питон для написания плагинов для ряда приложений:
    • Gnumeric — табличный процессор для UNIX-систем
    • Desktop — поисковый инструмент среды GNOME
    • Gedit — текстовый редактор
  • Greyhawk: Temple of Elemental Evil — игра для ОС Windows от фирмы Troika Games, Питон использован для скриптовой поддержки игрового движка

Компании и организации, интенсивно использующие Питон

  • Институт космического телескопа (STSCI)
  • Google
  • NASA
  • Nokia
  • Industrial Light & Magic
  • DreamWorks
  • Firaxis Games
  • Apple_Computer использует Python и Twisted для разработки сервера календарей iCal
  • CCP

Ссылки

Информация по различным аспектам языка

  • www.python.org — Официальный сайт языка Python
  • www.python.com.ua — Портал Python программистов(на русском)
  • exception.org.ua - Ежемесячный бесплатный семинар по языку Python в Киеве
  • www.python.ru — Pусский сайт, посвящённый Python
  • zope.net.ru/ — Русскоязычный форум по Python и Zope
  • Поваренная книга — Книга рецептов для python-программиста
  • PLEAC-Python — Коллекция решённых на Питоне задач (удобна для сравнения с другими языками)
  • Python Wiki
  • Python 2.4 Quick Reference — Быстрое ознакомление с Питоном 2.4
  • Русские python Wiki — Python Wiki для русскоязычных пользователей

Расширения и библиотеки для Python

  • Форумы — Форумы по Jython и IronPython на русском.
  • Vaults of Parnassus, The Python Cheese Shop — хранилища модулей и готовых программ
  • Jython — Официальный сайт интерпретатора Jython (Python для виртуальной машины Java).
  • IronPython — Официальный сайт IronPython (Реализация Python для Microsoft .NET и Mono).
  • SciPy — Scientific tools for Python — набор библиотек для научных приложений
  • PsycoJIT-компилятор для Python, позволяющий увеличить скорость работы программ в 3—10 раз
  • pygame.org — библиотека для написания игровых приложений на языке Python



Эта статья входит в число избранных.
Она была признана участниками проекта
одной из лучших статей русского раздела Википедии.
 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home