Что нового в Python 3

Модуль __future__
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 по умолчанию, который является более понятным для начинающих программистов.
Представление Unicode
Python 2 требует пометить строку, если вы хотите сохранить его как Unicode.
Python 3 хранит строки как Unicode, по умолчанию. У нас есть строка Unicode (utf-8), и 2 байтных класса: байты и массивы байт.
Функция xrange() удалена
В Python 2 range() возвращает список, а xrange() возвращает объект, который будет только генерировать элементы в диапазоне, когда это необходимо, сохраняя память.
В Python 3 функция range() будет удалена, а xrange () был переименована в range(). Кроме того, в range() объект поддерживает нарезку в Python 3.2 и более поздних версий.
raise exceprion
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
Аргументы в Exceptions
В Python 3, аргументы исключения должны быть объявлены ключевым словом ‘as’.
except Myerror, err: # В Python2 except Myerror as err: # В Python 3
Функция next() и метод .next()
В 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
Утилиты 2to3
Наряду с интерпретатором 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)