Ответ
Python 3 является современным стандартом и не имеет обратной совместимости с Python 2 из-за ряда фундаментальных улучшений. Python 2 официально не поддерживается с 1 января 2020 года.
Ключевые различия:
-
Функция
printВ Python 2printбыл оператором, а в Python 3 стал функцией, что требует использования скобок. Это делает его более гибким (например, позволяет перенаправлять вывод).# Python 2 print "Hello, World!" # Python 3 print("Hello, World!") -
Деление целых чисел В Python 2 деление двух целых чисел (
/) приводило к целочисленному делению (отбрасыванию остатка). В Python 3 оператор/всегда выполняет деление с плавающей точкой. Для целочисленного деления используется оператор//.# Python 2 print 5 / 2 # Вывод: 2 # Python 3 print(5 / 2) # Вывод: 2.5 print(5 // 2) # Вывод: 2 -
Обработка строк (Unicode) Это одно из самых важных изменений. В Python 2 строки по умолчанию были ASCII (
str), а для Unicode использовался отдельный типunicode. В Python 3 все строки (str) по умолчанию являются Unicode (UTF-8), а для бинарных данных используется типbytes. -
Функция
range()В Python 2range()создавал в памяти полный список чисел, что было неэффективно для больших диапазонов. Для создания итератора использовалсяxrange(). В Python 3 функцияrange()была переработана и теперь работает какxrange()из Python 2, возвращая итератор, аxrange()был удален. -
Синтаксис исключений Синтаксис для перехвата исключений был изменен и стал более явным.
# Python 2 except Exception, e: # Python 3 except Exception as e:
Ответ 18+ 🔞
Ну ты смотри, какие времена настали, блядь! Python 3 уже как стандарт, а этот старый Python 2 — его официально с 2020 года на свалку истории отправили, поддержки ноль ебать. А всё потому, что там такие изменения под капотом, что обратной совместимости нихуя не осталось.
Вот смотри, в чём главные подлянки, чтобы ты не попал:
-
Эта
printфункция, сука! Раньше, в Python 2,printбыл как какой-то особый оператор, без скобок. А теперь он стал нормальной функцией, и скобки ему подавай. Зато гибче стал, всякие фокусы с выводом делать можно.# Python 2 — старый стиль print "Привет, мир!" # Python 3 — новый порядок, блядь print("Привет, мир!") -
С делением вообще пиздец! Вот это реально многих ломало. В Python 2 делишь два целых числа — и тебе нахуй целый результат, остаток в помойку. А в Python 3 оператор
/всегда даёт дробь. Хочешь по-старому, по-деревенски? Используй//.# Python 2 — обман зрения, блядь print 5 / 2 # Выдаст тебе 2, и ни слова больше # Python 3 — вот теперь честно print(5 / 2) # Вывод: 2.5 print(5 // 2) # Вывод: 2 (вот это да, как раньше!) -
Со строками и юникодом — отдельная песня, ёпта! Это, наверное, самое важное. В Python 2 строки по умолчанию были этими... ASCIIшными, а для нормальных человеческих букв со всего мира надо было юзать
unicode. В Python 3 всё проще: обычные строки (str) — они уже юникодные, а для бинарного говна типа картинок естьbytes. Красота! -
Функция
range()поумнела. Раньше, в Python 2,range()тупо создавал в памяти весь список чисел от и до. Для большого диапазона — овердохуища памяти жрал. Умные люди юзалиxrange(), который ленивый был. Так вот в Python 3range()и есть тот самый ленивыйxrange(), а старыйxrange()выкинули нахуй за ненадобностью. -
Исключения ловить теперь иначе. Синтаксис чутка подправили, чтобы было понятнее.
# Python 2 — старый способ except Exception, e: # Python 3 — новый, более явный except Exception as e:
Вот такие пироги, блядь. Вроде мелочи, а код из-под второй версии на третью просто так не побежит. Придётся руки марать и переделывать. Но оно того стоит, ёпта!