Что нового в 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)