Рубрики

Важные различия между Python 2.x и Python 3.x с примерами

Оператор подразделения

Если мы переносим наш код или выполняем код python 3.x в python 2.x, это может быть опасно, если изменения целочисленного деления остаются незамеченными (так как это не вызывает никакой ошибки). Предпочтительно использовать плавающее значение (например, 7.0 / 5 или 7 / 5.0), чтобы получить ожидаемый результат при переносе нашего кода.

print 7 / 5

print -7 / 5    

  
«»»
Выход в Python 2.x
1
-2
Вывод в Python 3.x:
1.4
-1,4

  
# См. Ссылку ниже для деталей
# https://www.geeksforgeeks.org/division-operator-in-python/amp/
«»»

функция печати

Это самое известное изменение. При этом функция печати в Python 2.x заменяется функцией print () в Python 3.x, т. Е. Для печати в Python 3.x требуется дополнительная пара круглых скобок.

print 'Hello, Geeks'      # Python 3.x не поддерживает

print('Hope You like these facts')

  
«»»
Вывод в Python 2.x:
Привет, гики
Надеюсь, вам нравятся эти факты

  
Вывод в Python 3.x:
Файл "a.py", строка 1

    распечатать «Привет, гики»

                       ^

SyntaxError: неверный синтаксис

  
Обратитесь по ссылке ниже для деталей
https://www.geeksforgeeks.org/g-fact-25-print-single-multiple-variable-python/amp/
«»»

Как мы видим, если мы используем круглые скобки в Python 2.x, то это не проблема, но если мы не используем круглые скобки в Python 3.x, мы получаем SyntaxError.

Unicode:

В Python 2 неявный тип str — ASCII. Но в Python 3.x неявным типом str является Unicode.

print(type('default string '))

print(type(b'string with b '))

  
«»»
Вывод в Python 2.x (в байтах совпадает с str)
<тип 'str'>
<тип 'str'>

  
Вывод в Python 3.x (байты и str разные)
<класс 'str'>
<класс 'байтов'>
«»»

Python 2.x также поддерживает Unicode

print(type('default string '))

print(type(u'string with b '))

  
«»»
Вывод в Python 2.x (Unicode и str разные)
<тип 'str'>
<тип 'Юникод'>

  
Вывод в Python 3.x (Unicode и str одинаковы)
<класс 'str'>
<класс 'str'>
«»»

xrange:

xrange () в Python 2.x не существует в Python 3.x. В Python 2.x range возвращает список, т.е. range (3) возвращает [0, 1, 2], а xrange возвращает объект xrange, т. Е. Xrange (3) возвращает объект итератора, который работает аналогично итератору Java, и генерирует число при необходимости.
Если нам нужно повторять одну и ту же последовательность несколько раз, мы предпочитаем range (), поскольку range предоставляет статический список. xrange () восстанавливает последовательность каждый раз. xrange () не поддерживает слайсы и другие методы списка. Преимущество xrange () в том, что он экономит память, когда задача состоит в итерации в большом диапазоне.

В Python 3.x функция range теперь делает то, что делает xrange в Python 2.x, поэтому, чтобы сохранить наш код переносимым, мы могли бы вместо этого придерживаться использования range. Итак, функция диапазона в Python 3.x — это xrange из Python 2.x.

for x in xrange(1, 5):

    print(x),

  

for x in range(1, 5):

    print(x),

  
«»»
Выход в Python 2.x
1 2 3 4 1 2 3 4

  
Выход в Python 3.x
NameError: имя 'xrange' не определено
«»»

Обработка ошибок:

В обеих версиях есть небольшие изменения в обработке ошибок. В python 3.x требуется ключевое слово «as».

try:

    trying_to_check_error

except NameError, err:

    print err, 'Error Caused'   # Не будет работать в Python 3.x

  
«»»
Вывод в Python 2.x:
имя'ring_to_check_error 'не определено Ошибка вызвана

  
Вывод в Python 3.x:
Файл "a.py", строка 3

    кроме NameError, err:

                    ^

SyntaxError: неверный синтаксис
«»»

try:

     trying_to_check_error

except NameError as err: # 'as' необходим в Python 3.x

     print (err, 'Error Caused')

  
«»»
Вывод в Python 2.x:
(NameError («имя_update_check_error» не определено »,« Ошибка вызвана »)

  
Вывод в Python 3.x:
имя'ring_to_check_error 'не определено Ошибка вызвана
«»»

_future_module:

Это в основном не разница между двумя версиями, но полезно упомянуть здесь. Идея модуля __future__ — помочь в миграции. Мы можем использовать Python 3.x
Если мы планируем поддержку Python 3.x в нашем коде 2.x, мы можем использовать _future_, импортируя его в наш код.

Например, в приведенном ниже коде Python 2.x мы используем поведение целочисленного деления Python 3.x с использованием модуля __future__

# В приведенном ниже коде Python 2.x, разделение работает
# так же, как Python 3.x, потому что мы используем __future__

from __future__ import division

  

print 7 / 5

print -7 / 5

Выход :

1.4
-1.4

Другой пример, где мы используем скобки в Python 2.x, используя модуль __future__

from __future__ import print_function    

  

print('GeeksforGeeks')

Выход :

GeeksforGeeks

Обратитесь к этому для более подробной информации о модуле __future__.

Эта статья предоставлена Арпит Агарвал . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Важные различия между Python 2.x и Python 3.x с примерами

0.00 (0%) 0 votes