Консалтинг и автоматизация в области управления
эффективностью банковского бизнеса

Журнал ВРМ World

Python делает всю работу

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

Рассмотрим некоторые качественные характеристики языка Python:

  • Простота: простой синтаксис и ясная и элегантная семантика языка Python легка для изучения, чтения и использования как программистами, так и простыми пользователями. Опытные программисты смогут освоить Python за один день. Новички смогут использовать Python через полтора дня. Основной синтаксис языка Python выглядит как радикально упрощенный Алгол, Си или Паскаль и в результате прост для изучения людьми, имеющими некоторый опыт в обычной математике и/или распространенных языках программирования.
  • Мощность: Почти любое вычислительное понятие может быть выражено кратко и непосредственно на языке Python. Несмотря на вышеупомянутую "простоту", Python вовсе не игрушечный язык, предназначенный исключительно для новичков. Он имеет ряд мощных свойств, например:
    • Первоклассные функции и все прочее. Функции, методы, модули, классы и другие компоненты программ на Python могут передаваться функциям или храниться в структурах данных.
    • Объектная ориентация с множественным наследованием и динамическим связыванием. Python позволяет создавать объектно-ориентированные иерархии классы, и объект, к которому обращаются через name.attribute определяется в процессе выполнения программы через динамический поиск по имени. Например, как это продемонстрировано в главе, посвященной генерации HTML, эти характеристики допускают прямое выражение сложных вычислительных понятий и высокую степень повторного использования кода.
    • Объектные и именованные исключения. Ошибки и другие исключительные условия в программах на языке могут быть перехвачены с помощью предложений , а завершающие действия могут быть описаны с использованием try..finally. Это значительно упрощает код, который может натолкнуться на исключительные условия, прерывающие нормальное выполнение программы. Исключения могут также быть организованы в иерархии.
    • Динамические вызовы. Вызываемые объекты в языке Python допускают необязательные параметры, ключевые параметры или переменное число параметров. Эти свойства позволяют реализовать в кратких объявлениях языка Python самые общие и конфигурируемые операции.
    Высококвалифицированные программисты обнаружат, что даже самая утонченная идея обычно переводится в краткий и понятный сегмент кода языка Python при использовании высокой выразительной способности этого языка. Большие сложные программы также могут быть реализованы на Python, и конечный результат может начать работать гораздо раньше и в значительно более компактном и простом виде, чем можно было ожидать.
  • Расширяемость и гибкость: Python может быть с легкостью расширен для взаимодействия с другими программными системами, и также может быть легко встроен в другие программы в качестве компонента. Более того, Python допускает исключительную гибкость в обращении с компонентами языка. Например, модуль на языке Python, который предполагается использовать для взаимодействия с внешней системой, может быть протестирован с помощью написанной на Python кратко определенной "имитацией" этой системы.

Ниже приведен ряд важных технических характеристик языка Python, подтверждающих некоторые из вышеуказанных качественных свойств.

  • Интерпретируемый: Python - это динамически интерпретируемый язык, поддерживающий компиляцию в байт-код. Программы на Python могут разрабатываться и тестироваться с помощью интерактивного режима интерпретатора Python, допускающего интерактивные отладку, трассировку, профилировку и тестирование программных компонентов. Байт-код языка Python является также машинонезависимым и может выполняться на различных аппаратных и программных платформах без перекомпиляции. Например, продвинутые сетевые приложения могут загружать байт-код языка Python с удаленных машин и динамически его выполнять.
  • Объектно-ориентированный: Python поддерживает объектно-ориентированные структуры классов с множественным наследованием и динамическим связыванием. Python действительно является объектно-ориентированным до самого ядра: всё в нем представляет собой объекты, организованные в гибкую и изящную общую внутреннюю систему. Опытные программисты, пишущие на языке Си, изучая исходный код дистрибутива Python, обнаружат, что реализацию ядра приятно читать. При необходимости программисты могут создать альтернативную реализацию для любого базового компонента языка Python (такого как число или даже объектный класс) либо с помощью изменения кода реализации Python, либо через компилированные языковые расширения. Например, численные расширения Python добавляют матрицы с произвольным числом измерениями как <числовой тип> ("number type"), расширения MESS определяют альтернативную объектную модель для языка Python, а модуль определяет иерархические модульные структуры -- все эти дополнительные модули определяют альтернативные интерпретации основных операций ядра Python.
  • Динамический: Python использует динамическое определение типов и динамическое разрешение имен. Например, выражение может записать строку данных в файл или заархивировать произвольный объект данных в поток вывода, реализованный на языке Python и хранимый в основной памяти, а также может делать и то и то в различные моменты времени в зависимости от текущей привязки данных и вывода. Таким образом, функция языка Python, читающая ввод, преобразуя считываемые данные и записывая результат в вывод,

    def send_transformed(input, transform, output):
       while 1:
           data = input.read()
           if not data: return
           output.write( transform(data) )


    не обязана знать, являются ли вводимые или выводимые объекты файлами или какими-либо другими структурами, и что делают операции чтения, записи или преобразования. Эта гибкость допускает выражение общих операций (таких как send_transformed), которые могут быть легко использованы во множестве различных контекстов. Динамическое определение типов и динамическое разрешение имен, при надлежащем использовании, могут значительно уменьшить размер программ и ощутимо упростить тестирование и отладку, особенно для программ, взаимодействующих со сложными внешними системами, не реализованными до конца.
  • Ортогонально структурированный: Python создан из небольшого числа мощных конструкций. Простота этого языка позволяет различным программистам легче понимать и использовать коды друг друга, по сравнению с более сложными языками. Кроме того, простота языка Python позволяет новичкам быстро его освоить и начать с ним работать.
    В то же время простота языка не убивает его выразительность - мы утверждаем, что практически нет возможностей, характерных для других языков программирования, которые не могут быть просто и напрямую эмулированы в языке Python.
  • Расширяемый: Python может быть с легкостью расширен интерфейсами к внешним программным библиотекам или новыми типами данных с помощью компилированных модулей расширения. Добавлять новые компилированные компоненты в Python легко - гораздо легче, чем писать автономные компилированные программы. На большинстве основных платформ новые компилированные компоненты могут также загружаться в интерпретатор динамически, то есть по запросу.
  • Встраиваемый: Для другой программы интерпретатор языка Python выглядит как очень простой API, и эта книга покажет вам, как этот интерпретатор может быть на удивление просто встроен в другое приложение в качестве многоцелевого скриптового/расширяющего или склеивающего/управляющего средства.
  • Стабильный, протестированный и совместимый снизу-вверх: Python всегда был и остается совместимым снизу вверх. Новые версии интерпретатора всегда смогут запускать программы, написанные для старых версий. К этому моменту новые версии интерпретатора включают очень немного исправлений ошибок, потому что ядро языка Python тщательно тестировалось и отлаживалось в тысячах приложений в течение последних нескольких лет. Большинство сегодняшних ошибок незначительны, и их вполне можно избежать.
  • Переносимый и дружественный к внешнему программному обеспечению: Python написан на стандартном Си с использованием соглашений Posix для вводу/выводу и без проблем переносится на все платформы, поддерживающие Posix. Вы когда-нибудь слышали о BeBox? Если да, поздравляем, вы среди немногих избранных. Мы не слышали о нем до тех пор, пока кто-то не рассказал нам, что они перенесли Python на BeBox почти без проблем, так же, как он обычно переносился в сотни других компьютерных сред, без проблем или с незначительными проблемами. Более того, внутренние аспекты дизайна интерпретатора языка Python - такие, как его схема управления подсчетом ссылок - позволяют ему спокойно жить с большинством других программных компонентов без особых технических сложностей.
  • Бесплатный и без запрещений на редистрибуцию в форме исходника: Авторские права на Python, по сути, защищают авторов от юридических проблем и предотвращают попытки злонамеренных пользователей нарушить авторское право. Помимо этого, программисты и пользователи языка Python могут использовать его в исходной или бинарной форме где им заблагорассудится. В частности, программисты могут создавать продукты, которые используют Python и выпускать продукт только в бинарной форме со всеми модулями языка Python только в байт-компилированной форме, и они могут продавать или отдавать результат любым способом, который покажется им наиболее выгодным с точки зрения увеличения их дохода или известности на рынке (Лицензия Python позволяет распространять и использовать его действительно любым образом, т.е., в частности, не накладывает никаких ограничений на изменение исходного кода, использование как оригинального, так и измененного варианта интерпретатора и библиотек в коммерческих продуктах, etc. (в отличие от, например, GNU General Public Licence). Прим. перев.).

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