Каковы ключевые различия между Python 2 и Python 3

Ответ

Python 3 является современным стандартом и не имеет обратной совместимости с Python 2 из-за ряда фундаментальных улучшений. Python 2 официально не поддерживается с 1 января 2020 года.

Ключевые различия:

  1. Функция print В Python 2 print был оператором, а в Python 3 стал функцией, что требует использования скобок. Это делает его более гибким (например, позволяет перенаправлять вывод).

    # Python 2
    print "Hello, World!"
    
    # Python 3
    print("Hello, World!")
  2. Деление целых чисел В Python 2 деление двух целых чисел (/) приводило к целочисленному делению (отбрасыванию остатка). В Python 3 оператор / всегда выполняет деление с плавающей точкой. Для целочисленного деления используется оператор //.

    # Python 2
    print 5 / 2  # Вывод: 2
    
    # Python 3
    print(5 / 2)   # Вывод: 2.5
    print(5 // 2)  # Вывод: 2
  3. Обработка строк (Unicode) Это одно из самых важных изменений. В Python 2 строки по умолчанию были ASCII (str), а для Unicode использовался отдельный тип unicode. В Python 3 все строки (str) по умолчанию являются Unicode (UTF-8), а для бинарных данных используется тип bytes.

  4. Функция range() В Python 2 range() создавал в памяти полный список чисел, что было неэффективно для больших диапазонов. Для создания итератора использовался xrange(). В Python 3 функция range() была переработана и теперь работает как xrange() из Python 2, возвращая итератор, а xrange() был удален.

  5. Синтаксис исключений Синтаксис для перехвата исключений был изменен и стал более явным.

    # Python 2
    except Exception, e:
    
    # Python 3
    except Exception as e:

Ответ 18+ 🔞

Ну ты смотри, какие времена настали, блядь! Python 3 уже как стандарт, а этот старый Python 2 — его официально с 2020 года на свалку истории отправили, поддержки ноль ебать. А всё потому, что там такие изменения под капотом, что обратной совместимости нихуя не осталось.

Вот смотри, в чём главные подлянки, чтобы ты не попал:

  1. Эта print функция, сука! Раньше, в Python 2, print был как какой-то особый оператор, без скобок. А теперь он стал нормальной функцией, и скобки ему подавай. Зато гибче стал, всякие фокусы с выводом делать можно.

    # Python 2 — старый стиль
    print "Привет, мир!"
    
    # Python 3 — новый порядок, блядь
    print("Привет, мир!")
  2. С делением вообще пиздец! Вот это реально многих ломало. В Python 2 делишь два целых числа — и тебе нахуй целый результат, остаток в помойку. А в Python 3 оператор / всегда даёт дробь. Хочешь по-старому, по-деревенски? Используй //.

    # Python 2 — обман зрения, блядь
    print 5 / 2  # Выдаст тебе 2, и ни слова больше
    
    # Python 3 — вот теперь честно
    print(5 / 2)   # Вывод: 2.5
    print(5 // 2)  # Вывод: 2 (вот это да, как раньше!)
  3. Со строками и юникодом — отдельная песня, ёпта! Это, наверное, самое важное. В Python 2 строки по умолчанию были этими... ASCIIшными, а для нормальных человеческих букв со всего мира надо было юзать unicode. В Python 3 всё проще: обычные строки (str) — они уже юникодные, а для бинарного говна типа картинок есть bytes. Красота!

  4. Функция range() поумнела. Раньше, в Python 2, range() тупо создавал в памяти весь список чисел от и до. Для большого диапазона — овердохуища памяти жрал. Умные люди юзали xrange(), который ленивый был. Так вот в Python 3 range() и есть тот самый ленивый xrange(), а старый xrange() выкинули нахуй за ненадобностью.

  5. Исключения ловить теперь иначе. Синтаксис чутка подправили, чтобы было понятнее.

    # Python 2 — старый способ
    except Exception, e:
    
    # Python 3 — новый, более явный
    except Exception as e:

Вот такие пироги, блядь. Вроде мелочи, а код из-под второй версии на третью просто так не побежит. Придётся руки марать и переделывать. Но оно того стоит, ёпта!