Что нового в Python 3
Модуль __future__
Python 3.x представил некоторые несовместимые с Python 2 ключевые слова и функции, которые можно импортировать через встроенный модуль __future__ в Python 2. Если вы планируете поддержку Python 3.x для своего кода, рекомендуется использовать импорт __future__.
Например, если нам нужно поведение целочисленного деления Python 3.x в Python 2, добавьте следующий оператор импорта.
from __future__ import division
Функция печати
Наиболее заметным и наиболее широко известным изменением в Python 3 является то, как printфункция используется. Использование круглых скобок () с функцией печати теперь обязательно. Это было необязательно в 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) и двухбайтовые классы: байтовые и байтовые массивы.
Функция 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.
Here is a sample Python 2 code (area.py):
def area(x,y = 3.14):
a = y*x*x
print a
return a
a = area(10)
print "area",a
To convert into Python 3 version:
$2to3 -w area.py
Converted code :
def area(x,y = 3.14): # formal parameters
a = y*x*x
print (a)
return a
a = area(10)
print("area",a)