Многие начинающие Python-разработчики задаются вопросом, какую версию языка программирования им лучше выбрать. Как правило, останавливаются на той версии, которую описывает то учебное пособие, которое они используют для изучения языка. Тем не менее, лучше более подробно ориентироваться в вопросе, чтобы более качественно реализовывать те задачи, которые стоят перед конкретным разработчиком. В целом, чтобы не допустить некоторых проблем при создании кода, необходимо понимать ключевые отличия между разными версиями Пайтон. Давайте их рассмотрим более подробно.
- Что такое Python 2?
- Что такое Python 3?
- Что необходимо знать о Python 2?
- Какая версия языка лучше подходит?
- Основные отличия между версиями
- Что такое модуль _future_ Python?
- Разница между кодом Python 2 и Python 3 наглядно
- Сравнение функции print в Python 2 и 3
- Деление целочисленных значений в Python 2 и 3
- Функция xrange() в Python 2
- Метод __contains__ для объектов range в Python 3
- Отличия в скорости
- Как происходит вызов исключений в разных версиях
- Функция и метод next()
- Переменные цикла for, а также глобальная утечка пространства названий
- Выводы
Что такое Python 2?
Когда появился Python 2, процедура создания кода существенно упростилась в сравнении с прошлыми версиями. Так, появились технические детали Python Enhancement Proposal (PEP). Тем не менее, начиная с 2.7 версии Python 2 уже не развивается. Стоит также учесть, что поддержка этого языка уже также окончательно прекратилась. Вот почему читать горы литературы по этой версии языка программирования нет необходимости.
Что такое Python 3?
Это актуальная редакция Python, которая появилась в декабре 2008 года. Она внесла коррективы в некоторые проблемы, которые были присущими для второй редакции этого языка. Здесь следует учитывать, что эти версии несовместимы между собой. Конечно, ряд функций Python 3 были перенесены в Python 2.x, чтобы упростить миграцию. Но это делалось исключительно для этого, а не чтобы поддержать этот язык.
Что необходимо знать о Python 2?
Несмотря на то, что сейчас Python 2 считается устаревшим, есть определенное количество нюансов, которые все же следует учитывать:
- Чтобы стать профессиональным DevOps разработчиком, надо понимать, как устроена конфигурация таких элементов управления, как puppet либо ansible. Следовательно, важно правильно работать с каждой из этих версий.
- Если компания все еще использует вторую версию языка для написания кода, то с ним необходимо будет уметь работать.
- Если компания использует вторую версию Python, то тогда необходимо понимать, как взаимодействовать с этим языком программирования.
- Если команда девелоперов трудится над проектом, зависящим от других библиотек либо ПО, которое невозможно перенести в третью версию, то тогда ничего, кроме второй, и не остается.
Какая версия языка лучше подходит?
Конечно, если сравнивать все варианты между собой, то Python 3 имеет очевидное преимущество. Как минимум, это связано с тем, что вторая версия уже не поддерживается вообще. Массовое внедрение Python 3 – это четкое направление для развития в будущем.
После анализа всех аргументов в пользу и против использования третьей версии, оказывается, что она более предпочтительная. Тем не менее, некоторые задания могут требовать возможностей второй версии языка. В таком случае лучше использовать вторую версию.
Почему стоит воспользоваться третьей версией Python?
- Python 3 может работать с современными методами, такими как искусственный интеллект, машинное обучение и Data Science.
- Python 3 все еще поддерживается и развивается. Поэтому можно всегда получить помощь по той проблеме, которая возникла.
- Сам язык гораздо более просто изучить по сравнению с предыдущими версиями. И все идет по пути упрощения.
- Доступен мощный набор инструментов, а также библиотек.
- Высокая совместимость этого языка программирования с другими.
Основные отличия между версиями
Основа сравнения | Третья версия | Вторая версия |
Дата создания | 2008 | 2000 |
Функция вывода | print(“hello) | print “hello” |
Как осуществляется деление целочисленных значений | В результате выводится вещественное число. | В результате появляется целое число. |
Юникод | Все строки хранятся в формате Unicode. | Не все строки хранятся в этой кодировке, а только те, которые определяются с “u». |
Синтаксис | Более простой для понимания синтаксис | Менее простой для понимания синтаксис. |
Правила очереди для сравнений. | Упрощены | Довольно сложные. |
Итерация | Появилась дополнительная функция, которая осуществляет работу с итерациями – range() | Используется xrange() для итераций. |
Исключения | Заносятся в круглые скобки | Используются в примечаниях. |
Переменные | Значение переменных не отличается | Изменение глобальной переменной осуществляется в цикле for, если имена совпадают. |
Обратная совместимость | Нет ничего сложного в том, чтобы портировать код со второй версии на третью, правда качество такого портирования все равно не идеально. | Третья версия вообще не совместима со второй. |
Библиотеки | На данный момент большим количеством разработчиков создаются библиотеки, использование которых возможно с Python 3. | Большое количество библиотек, созданных для второй версии, вообще не совместимы с третьей версией языка. |
Какие можно сделать выводы?
- В Python 3 версии есть более простой для понимания синтаксис, в то время как во второй версии разобраться новичку будет довольно непросто.
- Стандартно используется для хранения строковых значений Юникод, в то время как во второй версии необходимо определять строковое значение с помощью u.
- Значение переменных в Python 3 не изменяется никогда, в то время как Python2 версии изменяет значение глобальной переменной, если использовать внутренний цикл for.
- Очереди значительно проще.
- Python 3 использует функцию range(), чтобы выполнять итерации.
Что такое модуль _future_ Python?
В Python 3 появился ряд несовместимых со второй версией языка ключевые слова, импорт которых возможен с использованием встроенного модуля _future_.
Разница между кодом Python 2 и Python 3 наглядно
Python 2.
def main(): print "Hello World!" if __name__== "__main__": main()
Python 3
def main(): print("Hello World!") if __name__== "__main__": main()
Сравнение функции print в Python 2 и 3
Одно из самых заметных изменений для новичков, безусловно, является изменение оператора print на функцию. Казалось бы, незначительные изменения в синтаксисе. Объект вывода теперь должен быть включенным в скобки.
С одной стороны, это неудобно. Ведь во второй версии нет необходимости отдельно прописывать скобки. Тем не менее, это помогает в тех случаях, когда разработчику нужно использовать несколько значений в одной строке. Если попытаться это сделать, то будет создан кортеж, и он же вернется.
Давайте для наглядности посмотрим на отличия между функциями print в Python 2 и 3.
Python 2
print 'Python', python_version() print 'Hello, World!' print "text", ; print 'print more text on the same line'
Python 3
print('Python', python_version()) print('Hello, World!') print(' print more text on the same line')
Если попытаться использовать синтаксис предыдущей версии в третьей версии Python, будет возвращена синтаксическая ошибка.
Деление целочисленных значений в Python 2 и 3
Эта особенность требует определенной осторожности, когда вы хотите перенести код второй версии в третью. Как правило, этот пункт долгое время остается незамеченным до тех пор, пока не будет вызвана синтаксическая ошибка.
Следовательно, в процессе написания кода Python 3 нередко применяются float(3)/2 либо 3/2.0 вместо 3/2. Это позволяет значительно упростить жизнь тем людям, которые работают во второй версии языка. Помимо этого, в ней рекомендуется пользоваться from __future__ import division.
Функция xrange() в Python 2
Эта функция пользуется большой популярностью среди разработчиков Python 2. Правда, итерация xrange в этом случае – не исчерпывающая, то есть, она может перебираться бесконечно.
Конечно, это может быть быстрее, но если сравнивать с одноразовыми итерациями, то лучше не повторять итерацию большое количество раз, поскольку каждый раз она будет начинаться с нуля.
В Python 3 функция xrange() уже отсутствует. Если попытаться обратиться к ней, будет вызвана ошибка NameError.
Метод __contains__ для объектов range в Python 3
Помимо этого, необходимо упомянуть то, что Python 3.x добавил новый метод к range – __contains__. С помощью этого метода пользователь может существенно увеличить скорость поиска в range для целочисленного и булевого типов.
Отличия в скорости
Помимо этого, нередко отмечают существенное отличие в скорости между range() и xrange(). Поскольку каждый из этих методов имплементируется одинаково, логично ожидать и одинаковой скорости. Тем не менее, разница все же есть, и она обусловлена тем фактом, что в целом Python 3 более медленный. В этом плане, безусловно, преимущество остается за второй версией.
Как происходит вызов исключений в разных версиях
Тогда как Python 2 может работать как со старым, так и с новым синтаксисом исключений, третья версия уже не позволяет этого делать. Если не добавить аргумент исключения в скобки, то появится синтаксическая ошибка.
Также есть некоторые отличия и в том, как осуществляется обработка исключений. В третьей версии в качестве ключевого слова необходимо обязательно использовать as.
Функция и метод next()
Эти функция и метод являются довольно популярными в среде разработчиков. Поэтому необходимо также упомянуть об одном изменении имплементации. В третьей версии метод .next() был полностью убран, и осталась исключительно функция. Если попробовать обратиться к методу .next(), то на выходе получается исключение AttributeError.
Переменные цикла for, а также глобальная утечка пространства названий
Преимуществом Python 3 также является то, что переменные цикла for теперь не утекают в глобальную область видимости.
Выводы
Таким образом, отличия между Python 2 и 3 версией фундаментальные. Если вы только начинаете изучать язык программирования, то даже вопрос не стоит о том, какой версии отдать предпочтение. Ведь третья и проще, и функциональнее, и современнее.