Python Python Python (или Python 3)

В статье "Python Python Python (aka Python 3)" автор излагает свой собственный взгляд на Python 3, а также говорит о том, что такое Python 3 для новичка и бывалого Python-программиста. Автор: Paul Barry

За неделю до Рождества 2008, сообщество Python увидело релиз 3-ей версии Python . Большое дело, да? Ок... оказывается, она уже была и существует сейчас, поскольку Python 3 - первый основной выпуск Python, несовместимый с предшествующими версиями языка. Python хорошо знаком читателям журнала Linux (победитель категории "любимый скрипт-язык" в 2008), и такое развитие событий может шокировать некоторых. Подробное описание всех изменений в Python 3 можно найти в разделе что нового в Python 3 (Смотрите перевод на русский язык статьи " Что нового в Python 3 " на момент опубликования: Python 3.1.1rc1). Другую интересную информацию можно найти на pythonology blog . Следовательно, в этой статье, я не собираюсь перефразировать этот материал. Вместо этого, я представляю мой собственный взгляд на Python 3, а также обсуждение, что такое Python 3 для новичка и бывалого Python-программиста.

Почему Python 3 несовместим?

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

print "The world is indeed flat."

теперь в Python 3, он должен быть записан как:

print("The world is indeed flat.")

На первый взгляд это кажется незначительным, пока Вы не начнете понимать, что в большинстве случаев каждая, когда-либо написанная Python-программа, имеет, по крайней мере, одну команду print , а часто и больше. Чтобы облегчить процесс преобразования команды print 2-ой версии в функцию print версии 3.0, Python 3 предоставляет удобный инструмент преобразования. Если предположить, что вышеупомянутая строка кода находится в файле flat.py, то эта командная строка отображает изменения, требуемые для преобразования этого кода в версию 3:

$ 2to3 flat.py

Чтобы автоматически применить требуемые изменения, используйте следующую командную строку (оригинал кода сохраняется в файл a .bak):

$ 2to3 -w flat.py

Напечатайте "2to3 --help" для активации списка опций. Конечно, возникает очевидный вопрос: "Зачем вносить подобное изменение вообще? " и, "Зачем разработчикам Python нарушать почти каждую существующую Python-программу?".

Можно дать один ответ на оба этих вопроса: потому что это имело смысл сделать. Во 2 версии команда print всегда использовалась так, как будто это была функция, даже несмотря на то, что это была команда, что означало её помещение в один ряд с подобными while , if , try , def и else , но так не должно было быть. В Python, все имена функций имеют добавление (), такие как int() , input() , float() , range() и так далее. Поскольку print всегда была больше функцией, чем командой, то она становится print() в Python 3, это конечно же, имело смысл сделать, даже если она нарушает весь этот код!

В Python 3 много изменений, о которых можно сказать "это имело смысл сделать". Например, улучшенный input() вместо raw_input() , во 2-ой версии, который убрали. То же самое касается и xrange() , который был заменен на range() . Как и при print() , инструмент преобразования 2to3 совершает эти изменения для Вас, и делает необходимые корректировки Вашего кода автоматически, если сделаны соответствующие настройки.

Применение Python 3 для Spin

Одним из преимуществ Python 3 является тот факт, что он может быть установлен параллельно с предшествующими версиями. Это позволит Вам поработать и перейти на 3 версию, когда это будет иметь смысл сделать, даже с поправкой на смешение скриптов  Python 2 и 3 на одной и той же машине. Разумеется, не надо делать то, что я сделал на моей системе Xubuntu : я запросил инсталлятор Python 3 установить программой-интерпретатором Python 3 по умолчанию. В ту же секунду, когда я это сделал, все перестало работать. Большинство скриптов системы управления Xubuntu в рамках ГИП (GUI) (и др.) используют Python, соответственно 2 выпуск Python. И когда десктоп моего Xubuntu пытался сделать что-либо, связанное с системами администрирования, то ничего не происходило.

Culprit был изменен в Python 3 и внедрен в механизм обработки исключений. Новый синтаксис чище, а старый  больше не поддерживается. Если только Ваш код Python 2 не запущен на релизе 2.6 (который имел много функций, вошедших в 3 выпуск, и измененный синтаксис), то он не будет работать. Поскольку мой Xubuntu работал на версии 2.5.2, то код обработки исключений вызвал синтаксическую ошибку для большинства моих внутренних скриптов системного администрирования, и они просто перестали работать. Конечно, Xubuntu ГИП не предупредил меня об этом и различные утилиты ничего не могли выполнить, а это раздражало. И только когда я попытался запустить утилиты из командной строки, моя проблема стала ясной: пришел запрос Python 3 для запуска без изменений кода Python 2. Когда я поменял /usr/python на /usr/bin/python3, затем повторно установил по умолчанию пакет Xubuntu Python (используя "sudo apt-get install python"), мои утилиты системного администрирования снова заработали.

Работа со Стандартной Библиотекой Python

Если Ваш существующий код не использует сторонние библиотеки, Вы можете быть приятно удивлены. Поскольку Python является скриптовым языком "со своей тяжелой артиллерией", вся стандартная библиотека которого была уже перенесена в Python 3. Это огромный плюс для Python-программистов, поскольку стандартная библиотека действительно очень богата.

Как насчет Существующих Проектов Python?

Весной 2009 года, я выполнил обзор нескольких самых крупных проектов Python 3, чтобы попытаться выяснить, куда направлены усилия Python 3. Я рассмотрел следующие проекты: Django (фреймворк web-приложения), Twisted (сетевая библиотека программирования) и SciPy / NumPy (вычислительная технология). Вот краткое резюме  каждого проекта Python 3.

Django

Поиск архива online-документации в docs.djangoproject.com для "Python 3" не дал результатов. FAQ предложил возможность Django запускаться на Python 3 в течение "года или двух ", главным образом благодаря усилию, требующему поддержки многих релизов Django на разных версиях Python. Конечно, нельзя сказать, что нет никакого прогресса в этой области. Python wiki содержит описание одного такого усилия для развития кодовой базы Django, которая будет работать со всеми версиями Python, которые поддерживают фреймворк, включая Python 3. Такие усилия (сохраняя единый базовый код, которая поддерживает Python 3 и предыдущие версии) не одобряется разработчиками Python 3, но это не остановило разработчиков Django. Пока это находится еще в зачаточном состоянии, и прогресс идет медленно, но предвещает хорошее будущее. Но если будут прикладываться такие усилия как в среде Django, то возможно совместимая 3-я версия может появиться быстрее, чем мы думаем.

Twisted

Это мощный сетевой движок поддерживает вторую версию Python. Информацию о переносе в Python 3 на Web-сайте проекта трудно найти, но то, что мне  удалось обнаружить, указывает на то, что разработчики Twisted одобряют решение с единым базовым кодом (которое отражают ранние усилия разработчиков Django). Очевидно, проект Twisted имеет большое и растущее число проектов, которые зависят от него и переход на новый, несовместимый Python не является тривиальной задачей. Снова, как и Django, исходя из той информации, которую я смог найти, разработчики Twisted предполагают перейти на Python 3 в несколько этапов "в последующие несколько лет".

SciPy/NumPy

Комбинация SciPy/NumPy предоставляет превосходный набор вычислительных ресурсов для учёных, использующих Python. Для достижения показателей, необходимых для удовлетворения таких требовательных пользователей, и SciPy и NumPy используют преимущества низкоуровнего C API, который идет с  Python. Как Вы можете себе представить, этот API был изменен для Python 3, и это стало причиной головной боли для существующих проектов Python, которые используют это API. Конечно, это не остановило разработчиков NumPy от попыток . Работа находится на ранней стадии и полагается на усилия некоторых других "upstream" проектов, так что ожидается медленный, но устойчивый прогресс. Сейчас, SciPy/NumPy является проектом для релиза Python 2.

Переход на Python 3

Если Ваш "доморощенный" Python-код не использует сторонний код, т.е. только стандартные библиотеки, то Вы можете перенести подавляющее большинство Вашего кода в Python, используя инструмент переноса 2to3. Руководство "Что нового в Python 3" рекомендует сначала переносить в релиз 2.6 (если Вы уже этого не сделали), затем включить в релизе 2.6 функции совместимости и предупреждения 3 версии. Только после прохождения всех тестов, следует приступить к использованию инструмента 2to3 для переноса в Python 3.

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

В рамках другой стратегии возможно совсем не стоит переносить, если Ваш код хорошо работает на Python 2. Так как Python 2 и 3 могут сосуществовать вместе, Вы можете сами решать по мере необходимости  написать ли новый код на Python 3, или же оставить существующий на Python 2.

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

Заключение

Со временем список сторонних модулей, разработанных или (модифицированных) для Python 3 растет . Это здорово. Релиз Python 2.6 стал лишь "исправлением", поскольку не было добавлено ни одной новой функции к старой версии Python. Все новые функции и все новшества войдут в проект 3 версии. Хотя говорить еще рано, все же, Python 3 позиционируется стать кросс-платформенной технологией программирования. Python 3 вместил в себя все качества предыдущих версий Python. Переходить ли на Python 3 и когда это делать (со 2 версии) остается личным решением. Конечно, если только Вы не смотрите на Python по новому, и уверены, что будете работать с 3 версией и не тратить усилия на работу со 2 версией данного языка. Недавно был выпущен релиз Python 3.1 (Прим.перев.: на момент публикации: Python 3.1.1rc1 ) и версия 3.0 в настоящее время не используется. Релиз 3.1 содержит несколько новых функций, и множество исправлений.

Оригинал статьи на www.linuxjournal.com

Перевод КОМТЕТ komtet.ru

Вам также может помочь