Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глазачев Дипломная Коряжма 2010.docx
Скачиваний:
19
Добавлен:
27.09.2019
Размер:
1.12 Mб
Скачать

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

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

Существуют расширения, позволяющие использовать все основные GUI библиотеки — wxPython, основанное на библиотеке wxWidgets, PyGTK для Gtk, PyQt для Qt и другие. Некоторые из них, например, PyQt, также предоставляют широкие возможности по работе с базами данных, графикой и сетями, используя все возможности библиотеки, на которой основаны.

Для создания игр и приложений, требующих нестандартного интерфейса, можно использовать библиотеку Pygame. Она также предоставляет обширные средства работы с мультимедиа: с её помощью можно управлять звуком и изображениями, воспроизводить видео. Предоставляемое pygame аппаратное ускорение графики OpenGL имеет более высокоуровневый интерфейс по сравнению с PyOpenGL, копирующей семантику С-библиотеки для OpenGL. Есть также PyOgre, обеспечивающая привязку к Ogre — высокоуровневой объектно-ориентированной библиотеке 3D-графики. Кроме того, существует библиотека pythonOCC обеспечивающая привязку к среде 3D-моделирования и симуляции OpenCascade.

1.5. Недостатки Низкое быстродействие

Питон, как и многие другие интерпретируемые языки, не применяющие, например, JIT-компиляторов, имеют один общий недостаток — сравнительно невысокую скорость выполнения программ. Однако, в случае с Python этот недостаток компенсируется уменьшением времени разработки программы. В среднем программа написанная на Питоне в 2—4 раза меньше чем её Си++ или Java аналог. Стоит отметить, что в последних версиях CPython программы на Питоне выполняются значительно быстрее, чем в предыдущих. Сохранение байт-кода (файлы .pyc и .pyo) позволяет интерпретатору не тратить лишнее время на перекомпиляцию кода модулей при каждом запуске, в отличие, например, от языка Perl. Кроме того, существует специальная библиотека psyco, позволяющая несколько оптимизировать выполнение программ (однако приводящая к увеличению потребления оперативной памяти).

Нужно отметить, что уже существуют проекты реализаций языка Питон, вводящие высокопроизводительные виртуальные машины в качестве компилятора заднего плана. Примерами таких реализаций может служить PyPy, базирующийся на LLVM; более ранней инициативой является проект Parrot. Не без основания ожидается, что использование высокопроизводительных машин типа LLVM приведёт к тем же результатам, что и использование аналогичных подходов для реализаций языка Java, где т. н. низкая вычислительная производительность в основном преодолена.

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

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

Отсутствие статической типизации

Отсутствие статической типизации является не столько недостатком интерпретатора, сколько выбором дизайнера языка. Дело в том, что в Python принята так называемая «Утиная типизация». В силу этого типы передаваемых значений недоступны на этапе компиляции, и ошибки вроде AttributeError могут возникать во время исполнения. Отсутствие статической типизации также является одной из основных причин низкого быстродействия.

Существуют модули, которые позволяют контролировать типы параметров функций на этапе исполнения, например typecheck или method signature checking decorators. Добавление необязательной статической типизации параметров функции запланированно для Python3000. При этом, однако, непосредственно интерпретатор не будет проверять типы, а только добавлять соответствующую информацию к метаданным функции для её (информации) последующего использования модулями расширений.

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

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

Планы по поддержке перегрузки в Python3000. Перегрузка функций реализована различными сторонними библиотеками, в том числе PEAK предоставляет чрезвычайно богатый возможностями механизм перегрузки функций с использованием произвольных правил.