Python 2 против Python 3: практические соображения

Вступление

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

Поскольку Python - это мультипарадигмальный язык, то есть он поддерживает несколько стилей программирования, включая сценарии и объектно-ориентированные, он подходит для общего назначения. Python все чаще используется в промышленности такими организациями, как Объединенный космический альянс (главный подрядчик НАСА по поддержке челноков) и Industrial Light & Magic (VFX и анимационная студия Lucasfilm). Python предлагает большой потенциал для тех, кто хочет выбрать дополнительный язык программирования. ,

Разработанный в конце 1980-х и впервые опубликованный в 1991 году, автором Python был Гвидо ван Россум, который все еще очень активен в сообществе. Задуманный как преемник языка программирования ABC, первая итерация Python уже включала обработку исключений,functions иclasses with inheritance. Когда в 1994 году был образован важный дискуссионный форум группы новостей Usenet, называемый comp.lang.python, пользовательская база Python выросла, что позволило Python стать одним из самых популярных языков программирования для разработки с открытым исходным кодом.

Общий обзор

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

Python 2

Опубликованный в конце 2000 года, Python 2 сигнализировал о более прозрачном и инклюзивном процессе разработки языка, чем более ранние версии Python с реализацией PEP (Python Enhancement Proposal), технической спецификации, которая либо предоставляет информацию членам сообщества Python, либо описывает новую функцию язык.

Кроме того, Python 2 включал в себя множество других программных функций, включая сборщик мусора, обнаруживающий цикл, для автоматизации управления памятью, расширенную поддержку Юникода для стандартизации символов и составления списков для создания списка на основе существующих списков. Поскольку Python 2 продолжал развиваться, было добавлено больше функций, включая объединение типов и классов Python в единую иерархию в версии Python 2.2.

Python 3

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

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

Сначала Python 3 был принят медленно из-за того, что язык не был обратно совместим с Python 2, что требовало от людей принимать решение о том, какую версию языка использовать. Кроме того, многие библиотеки пакетов были доступны только для Python 2, но поскольку команда разработчиков Python 3 повторила, что поддержка Python 2 окончена, больше библиотек было перенесено в Python 3. Более широкое распространение Python 3 можно продемонстрировать по количеству пакетов Python, которые теперь обеспечивают поддержку Python 3, которые на момент написания статьи включали 339 из 360 самых популярных пакетов Python.

Python 2.7

После выпуска в 2008 году Python 3.0 Python 2.7 был опубликован 3 июля 2010 года и запланирован как последний из выпусков 2.x. Цель Python 2.7 состояла в том, чтобы облегчить пользователям Python 2.x перенос функций на Python 3, обеспечивая некоторую степень совместимости между ними. Эта поддержка совместимости включала расширенные модули для версии 2.7, такие какunittest для поддержки автоматизации тестирования,argparse для синтаксического анализа параметров командной строки и более удобные классы вcollections.

Из-за уникального положения Python 2.7 как версии между более ранними итерациями Python 2 и Python 3.0 он остается очень популярным выбором для программистов благодаря своей совместимости со многими надежными библиотеками. Когда мы говорим о Python 2 сегодня, мы обычно имеем в виду выпуск Python 2.7, так как это наиболее часто используемая версия.

Python 2.7, однако, считается устаревшим языком, и его дальнейшее развитие, которое сегодня состоит в основном из исправлений ошибок, полностью прекратится в 2020 году.

Ключевые отличия

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

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

Распечатать

В Python 2print рассматривается как оператор, а не функция, что было типичной областью путаницы, поскольку многие другие действия в Python требуют для выполнения аргументов в круглых скобках. Если вы хотите, чтобы ваша консоль выводилаSammy the Shark is my favorite sea creature в Python 2, вы можете сделать это с помощью следующего оператораprint:

print "Sammy the Shark is my favorite sea creature"

В Python 3print() теперь явно рассматривается как функция, поэтому, чтобы распечатать ту же строку выше, вы можете сделать это просто и легко, используя синтаксис функции:

print("Sammy the Shark is my favorite sea creature")

Это изменение сделало синтаксис Python более согласованным, а также упростило переключение между различными функциями печати. Для удобства синтаксисprint() также обратно совместим с Python 2.7, поэтому ваши функции Python 3print() могут работать в любой версии.

Деление с целыми числами

В Python 2 любое число, которое вы вводите без десятичных знаков, рассматривается как тип программирования, называемыйinteger. Хотя на первый взгляд это кажется простым способом обработки типов программирования, когда вы пытаетесь разделить целые числа вместе, иногда вы ожидаете получить ответ с десятичными знаками (так называемыйfloat), например:

5 / 2 = 2.5

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

Когда два числа по обе стороны от символа деления/ являются целыми числами, Python 2 выполняетfloor division, так что для частногоx возвращаемое число является наибольшим целым числом, меньшим или равнымxс. Это означает, что когда вы пишете5 / 2 для деления двух чисел, Python 2.7 возвращает наибольшее целое число, меньшее или равное 2,5, в данном случае2:

a = 5 / 2
print a
Output2

Чтобы изменить это, вы можете добавить десятичные разряды, как в5.0 / 2.0, чтобы получить ожидаемый ответ2.5.

В Python 3integer division стал более интуитивно понятным, например:

a = 5 / 2
print(a)
Output2.5

Вы все равно можете использовать5.0 / 2.0 для возврата2.5, но если вы хотите выполнить разделение этажей, вы должны использовать синтаксис Python 3 для//, например:

b = 5 // 2
print(b)
Output2

Эта модификация в Python 3 сделала деление на целые числа более интуитивным и представляет собой функцию, которая обратно совместима сnot с Python 2.7.

Поддержка Юникода

Когда языки программирования обрабатывают типstring, то есть последовательность символов, они могут делать это несколькими различными способами, чтобы компьютеры могли преобразовывать числа в буквы и другие символы.

Python 2 по умолчанию использует алфавит ASCII, поэтому, когда вы вводите"Hello, Sammy!", Python 2 обрабатывает строку как ASCII. ASCII, не более двух сотен символов в лучшем случае в различных расширенных формах, не очень гибкий метод для кодирования символов, особенно не английских.

Чтобы использовать более универсальную и надежную кодировку символов Unicode, которая поддерживает более 128 000 символов в современных и исторических сценариях и наборах символов, вам нужно будет ввестиu"Hello, Sammy!" с префиксомu, обозначающим Unicode.

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

Если вы хотите, чтобы ваш код Python 3 был обратно совместим с Python 2, вы можете оставитьuперед строкой.

Продолжение разработки

Самое большое различие между Python 3 и Python 2 не является синтаксическим, но тот факт, что Python 2.7 утратит постоянную поддержку в 2020 году и Python 3 будет продолжать развиваться с большим количеством функций и большим количеством исправлений ошибок.

Последние разработки включаютformatted string literals, более простую настройкуclass creation и более чистый синтаксический способ обработки умножения матриц.

Непрерывная разработка Python 3 означает, что разработчики могут рассчитывать на своевременное устранение проблем, а программы могут быть более эффективными при увеличении функциональности, создаваемой с течением времени.

Дополнительные моменты для рассмотрения

Как человек, начинающий Python как новый программист, или опытный программист, плохо знакомый с языком Python, вы захотите подумать, чего вы надеетесь достичь в изучении языка.

Если вы надеетесь просто учиться без заданного проекта, вы, скорее всего, захотите принять во внимание, что Python 3 будет продолжать поддерживаться и развиваться, а Python 2.7 - нет.

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

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

Заключение

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

Хотя есть несколько ключевых отличий, не так уж сложно перейти с Python 3 на Python 2 с несколькими изменениями, и вы часто обнаружите, что Python 2.7 может легко запускать код Python 3, особенно когда вы только начинаете. Вы можете узнать больше об этом процессе, прочитав руководствоHow To Port Python 2 Code to Python 3.

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

Related