В Python 3.x представлены некоторые несовместимые с Python 2 ключевые слова и функции, которые можно импортировать с помощью встроенного модуля __future__ в Python 2. Рекомендуется использовать импорт __future__, если вы планируете поддержку Python 3.x для своего кода.
Например, если нам нужно поведение целочисленного деления Python 3.x в Python 2, добавьте следующий оператор импорта.
from __future__ import division
Функция печати
Наиболее заметное и наиболее известное изменение в Python 3 — это использование функции печати . Использование круглых скобок () с функцией печати теперь является обязательным. Это было необязательно в Python 2.
print "Hello World" #is acceptable in Python 2 print ("Hello World") # in Python 3, print must be followed by ()
Функция print () по умолчанию вставляет новую строку в конце. В Python 2 это можно подавить, поставив ‘,’ в конце. В Python 3 «end = »» добавляет пробел вместо новой строки.
print x, # Trailing comma suppresses newline in Python 2 print(x, end=" ") # Appends a space instead of a newline in Python 3
Чтение ввода с клавиатуры
Python 2 имеет две версии функций ввода: input () и raw_input () . Функция input () обрабатывает полученные данные как строку, если они включены в кавычки » или «», в противном случае данные обрабатываются как число.
В Python 3 функция raw_input () устарела. Далее, полученные данные всегда обрабатываются как строки.
In Python 2 >>> x = input('something:') something:10 #entered data is treated as number >>> x 10 >>> x = input('something:') something:'10' #entered data is treated as string >>> x '10' >>> x = raw_input("something:") something:10 #entered data is treated as string even without '' >>> x '10' >>> x = raw_input("something:") something:'10' #entered data treated as string including '' >>> x "'10'" In Python 3 >>> x = input("something:") something:10 >>> x '10' >>> x = input("something:") something:'10' #entered data treated as string with or without '' >>> x "'10'" >>> x = raw_input("something:") # will result NameError Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> x = raw_input("something:") NameError: name 'raw_input' is not defined
Целочисленное деление
В Python 2 результат деления двух целых чисел округляется до ближайшего целого числа. В результате 3/2 покажет 1. Чтобы получить деление с плавающей запятой, числитель или знаменатель должны быть явно использованы в качестве числа с плавающей запятой. Следовательно, либо 3,0 / 2 или 3 / 2,0 или 3,0 / 2,0 приведет к 1,5
Python 3 оценивает 3/2 как 1,5 по умолчанию, что более интуитивно понятно для новых программистов.
Unicode Представление
Python 2 требует, чтобы вы пометили строку с помощью au, если вы хотите сохранить ее как Unicode.
По умолчанию Python 3 хранит строки как Unicode. У нас есть строки Unicode (utf-8) и 2-байтовые классы: байтовые и байтовые массивы.
Функция xrange () удалена
В Python 2 range () возвращает список, а xrange () возвращает объект, который будет генерировать элементы в диапазоне только при необходимости, экономя память.
В Python 3 функция range () удалена, а xrange () была переименована в range (). Кроме того, объект range () поддерживает нарезку в Python 3.2 и более поздних версиях.
поднять исключение
Python 2 принимает обе нотации, «старый» и «новый» синтаксис; Python 3 вызывает SyntaxError, если мы не заключаем аргумент исключения в круглые скобки.
raise IOError, "file error" #This is accepted in Python 2 raise IOError("file error") #This is also accepted in Python 2 raise IOError, "file error" #syntax error is raised in Python 3 raise IOError("file error") #this is the recommended syntax in Python 3
Аргументы в исключениях
В Python 3 аргументы исключения должны быть объявлены с ключевым словом as.
except Myerror, err: # In Python2 except Myerror as err: #In Python 3
Функция next () и метод .next ()
В Python 2 допускается использование next () в качестве метода объекта генератора. В Python 2 также принята функция next () для перебора объекта-генератора. В Python 3, однако, next (0 как метод генератора прекращается и вызывает AttributeError .
gen = (letter for letter in 'Hello World') # creates generator object next(my_generator) #allowed in Python 2 and Python 3 my_generator.next() #allowed in Python 2. raises AttributeError in Python 3
2to3 Утилита
Наряду с интерпретатором Python 3 скрипт 2to3.py обычно устанавливается в папку tools / scripts. Он читает исходный код Python 2.x и применяет серию исправлений, чтобы преобразовать его в действительный код Python 3.x.