Python 3.x ввел некоторые Python 2-несовместимые ключевые слова и функции, которые могут быть импортировать через встроенный модуль __future__ в Python 2. Рекомендуется использовать импорт __future__, если вы планируете поддержку 3.x Python для вашего кода.
Например, если мы хотим, поведение деления целого числа Python 3.x в Python 2, добавьте следующий оператор импорта.
from __future__ import division
Наиболее заметные и наиболее широко известные изменения в Python 3, это использование функции print. Использование круглых скобок () с функцией печати является обязательным. Она была необязательной в Python 2.
print "Hello World" #приемлемо в Python 2 print ("Hello World") # в Python 3, после печати должны последовать скобки ()
Функция print() вставляет новую строку в конце, по умолчанию. В Python 2, она может отсутствовать, поставив ‘,’ в конце. В Python 3, “end =’ ‘” присоединяет пространство вместо символа новой строки.
print x, # Точка с запятой подавляет строки в Python 2 print(x, end=" ") # Добавляет пробел вместо символа новой строки в Python 3
Python 2 имеет две версии входных функций, input() и raw_input(). Функция input() обрабатывает принятые данные в виде строки, если она заключена в кавычках ” или “”, в противном случае данные рассматриваются как число.
В Python 3, функция raw_input() является устаревшей. Кроме того, полученные данные всегда рассматриваются как строки.
В Python 2 >>> x = input('что-то:') что-то:10 # введенных данных обрабатывается как число >>> x 10 >>> x = input('что-то:') что-то:'10' #введенные данные обрабатываются как строки >>> x '10' >>> x = raw_input("что-то:") что-то:10 #введенные данные обрабатываются как строки даже без '' >>> x '10' >>> x = raw_input("что-то:") что-то:'10' #введенные данные обрабатываются как строки в том числе '' >>> x "'10'" В Python 3 >>> x = input("что-то:") что-то:10 >>> x '10' >>> x = input("что-то:") something:'10' #введенные данные обрабатываются как строки с или без '' >>> x "'10'" >>> x = raw_input("что-то:") # приведет к NameError Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> x = raw_input("something:") NameError: имя 'raw_input' не определено
В Python 2, результат деления двух целых чисел округляются до ближайшего целого числа. В результате, 3/2 будет показывать 1. Для того, чтобы получить деление с плавающей точкой, числитель или знаменатель должен быть явно использовать в качестве плавающей точки. Следовательно, либо 3.0/2 или 3/2.0 или 3.0/2.0 приведет к 1,5
Python 3 оценивает 3/2, как 1.5 по умолчанию, который является более понятным для начинающих программистов.
Python 2 требует пометить строку, если вы хотите сохранить его как Unicode.
Python 3 хранит строки как Unicode, по умолчанию. У нас есть строка Unicode (utf-8), и 2 байтных класса: байты и массивы байт.
В 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: # В Python2 except Myerror as err: # В Python 3
В Python 2, next() в качестве метода объекта генератора, не допускается. В Python 2, функция next(), принята для генерации перебора объекта. В Python 3, однако, next(0) в качестве способа генератора прекращается и вызывает AttributeError.
gen = (letter for letter in 'Hello World') # создает генератор объекта next(my_generator) #допускается в Python 2 и в Python 3 my_generator.next() #допускается в Python 2. вызывает AttributeError в Python 3
Наряду с интерпретатором Python 3, сценарий 2to3.py обычно устанавливается в папке инструментов/сценариев. Он читает исходный код Python 2.x и применяет ряд фиксаторов, чтобы превратить его в действующий код Python 3.x.
Вот пример кода на Python 2 (area.py): def area(x,y = 3.14): a = y*x*x print a return a a = area(10) print "area",a Для преобразования в Python версии 3: $2to3 -w area.py Преобразованный код : def area(x,y = 3.14): # formal parameters a = y*x*x print (a) return a a = area(10) print("area",a)