Учебники

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

В 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.