Документация Python неофициальный перевод

3.0.md

314 строк · 69.7 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.2/whatsnew/3.0.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Что нового в Python 3.089| Автор: | Guido van Rossum |10| --- | --- |1112Эта статья объясняет новые возможности Python 3.0 по сравнению с 2.6. Python 3.0, также известный как «Python 3000» или «Py3K», является первым в истории выпуском Python, который *намеренно нарушает обратную совместимость*. В нём больше изменений, чем в типичном выпуске, и многие из них важны для всех пользователей Python. Тем не менее, после осмысления изменений становится ясно, что Python на самом деле не так уж сильно изменился – в целом мы в основном исправляем известные недочёты и недостатки, а также удаляем много старого хлама.1314Эта статья не ставит целью дать полную спецификацию всех новых возможностей, а скорее предоставляет удобный обзор. За полными подробностями следует обращаться к документации Python 3.0 и/или к многочисленным PEP, упомянутым в тексте. Чтобы понять все детали реализации и обоснование конкретной возможности, в PEP обычно содержится больше сведений, чем в обычной документации; но учтите, что после полной реализации возможности PEP, как правило, не обновляются.1516Из-за нехватки времени этот документ не так полон, как следовало бы. Как всегда для нового релиза, файл `Misc/NEWS` в дистрибутиве исходного кода содержит множество подробной информации о каждом мелком изменении.1718## Типичные проблемы1920В этом разделе перечислены те немногие изменения, которые с наибольшей вероятностью вызовут затруднения у тех, кто привык к Python 2.5.2122### Print – функция2324Инструкция `print` заменена функцией [`print()`](https://python-all.ru/3.2/library/functions.html#print) с именованными аргументами, заменившими большую часть специального синтаксиса старой инструкции `print` ([**PEP 3105**](https://python-all.ru/3.2/whatsnew/3.0.html)). Примеры:2526```python27Old: print "The answer is", 2*228New: print("The answer is", 2*2)2930Old: print x,           # Завершающая запятая подавляет перевод строки31New: print(x, end=" ")  # Добавляет пробел вместо перевода строки3233Old: print              # Выводит перевод строки34New: print()            # Необходимо вызвать функцию!3536Old: print >>sys.stderr, "fatal error"37New: print("fatal error", file=sys.stderr)3839Old: print (x, y)       # выводит repr((x, y))40New: print((x, y))      # Не то же самое, что print(x, y)!41```4243Также можно настроить разделитель между элементами, например:4445```python46print("There are <", 2**32, "> possibilities!", sep="")47```4849что выводит:5051```python52There are <4294967296> possibilities!53```5455Примечание:5657- Функция [`print()`](https://python-all.ru/3.2/library/functions.html#print) не поддерживает возможность «softspace» старой инструкции `print`. Например, в Python 2.x `print "A\n", "B"` вывела бы `"A\nB\n"`; но в Python 3.0 `print("A\n", "B")` выводит `"A\n B\n"`.58- Сначала вы будете часто вводить старое `print x` в интерактивном режиме. Пора переучить пальцы вводить `print(x)` вместо этого!59- При использовании инструмента преобразования исходного кода `2to3` все инструкции `print` автоматически преобразуются в вызовы функции [`print()`](https://python-all.ru/3.2/library/functions.html#print), так что для больших проектов это в основном не проблема.6061### Представления и итераторы вместо списков6263Некоторые известные API больше не возвращают списки:6465- Методы [`dict`](https://python-all.ru/3.2/library/stdtypes.html#dict): [`dict.keys()`](https://python-all.ru/3.2/library/stdtypes.html#dict.keys), [`dict.items()`](https://python-all.ru/3.2/library/stdtypes.html#dict.items) и [`dict.values()`](https://python-all.ru/3.2/library/stdtypes.html#dict.values) теперь возвращают «представления» (views) вместо списков. Например, это больше не работает: `k = d.keys(); k.sort()`. Используйте `k = sorted(d)` (это работает и в Python 2.5, и так же эффективно).66- Кроме того, методы `dict.iterkeys()`, `dict.iteritems()` и `dict.itervalues()` больше не поддерживаются.67- [`map()`](https://python-all.ru/3.2/library/functions.html#map) и [`filter()`](https://python-all.ru/3.2/library/functions.html#filter) возвращают итераторы. Если действительно нужен список и все входные последовательности имеют одинаковую длину, быстрый выход – обернуть [`map()`](https://python-all.ru/3.2/library/functions.html#map) в [`list()`](https://python-all.ru/3.2/library/functions.html#list), например `list(map(...))`, но лучше часто использовать списковое включение (особенно если исходный код использует [`lambda`](https://python-all.ru/3.2/reference/expressions.html#lambda)) или переписать код так, чтобы список вообще не требовался. Особенно коварен [`map()`](https://python-all.ru/3.2/library/functions.html#map), вызываемый ради побочных эффектов функции; правильное преобразование – использовать обычный цикл [`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for) (поскольку создание списка было бы просто расточительным).6869  Если входные последовательности разной длины, [`map()`](https://python-all.ru/3.2/library/functions.html#map) остановится на самой короткой из последовательностей. Для полной совместимости с *map* из Python 2.x, оберните последовательности в [`itertools.zip_longest()`](https://python-all.ru/3.2/library/itertools.html#itertools.zip_longest), например `map(func, *sequences)` становится `list(map(func, itertools.zip_longest(*sequences)))`.70- [`range()`](https://python-all.ru/3.2/library/functions.html#range) теперь ведёт себя как `xrange()` в прошлом, за исключением того, что работает со значениями произвольного размера. Последнего больше не существует.71- [`zip()`](https://python-all.ru/3.2/library/functions.html#zip) теперь возвращает итератор.7273### Сравнения на упорядочивание7475Python 3.0 упростил правила для сравнений на упорядочивание:7677- The ordering comparison operators (`<`, `<=`, `>=`, `>`) raise a TypeError exception when the operands don’t have a meaningful natural ordering. Thus, expressions like `1 < ''`, `0 > None` or `len <= len` are no longer valid, and e.g. `None < None` raises [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError) instead of returning `False`. A corollary is that sorting a heterogeneous list no longer makes sense – all the elements must be comparable to each other. Note that this does not apply to the `==` and `!=` operators: objects of different incomparable types always compare unequal to each other.78- `builtin.sorted()` и `list.sort()` больше не принимают аргумент *cmp*, задающий функцию сравнения. Вместо него используйте аргумент *key*. Обратите внимание: аргументы *key* и *reverse* теперь являются «только по ключу».79- Функцию `cmp()` следует считать устаревшей, а специальный метод `__cmp__()` больше не поддерживается. Используйте [`__lt__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__lt__) для сортировки, [`__eq__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__eq__) с [`__hash__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__hash__) и другие операции сравнения по необходимости. (Если вам действительно нужна функциональность `cmp()`, можно использовать выражение `(a > b) - (a < b)` как эквивалент `cmp(a, b)`.)8081### Целые числа8283- [**PEP 0237**](https://python-all.ru/3.2/whatsnew/3.0.html): По сути, `long` переименован в [`int`](https://python-all.ru/3.2/library/functions.html#int). То есть существует только один встроенный целочисленный тип с именем [`int`](https://python-all.ru/3.2/library/functions.html#int); но он ведёт себя в основном как старый тип `long`.84- [**PEP 0238**](https://python-all.ru/3.2/whatsnew/3.0.html): Выражение вроде `1/2` возвращает число с плавающей запятой. Используйте `1//2` для получения усечённого поведения. (Последний синтаксис существует уже много лет, по крайней мере с Python 2.2.)85- Константа `sys.maxint` была удалена, поскольку больше нет ограничения на значение целых чисел. Однако [`sys.maxsize`](https://python-all.ru/3.2/library/sys.html#sys.maxsize) можно использовать как целое число, большее любого практически возможного индекса списка или строки. Оно соответствует «естественному» размеру целого числа в реализации и обычно равно `sys.maxint` в предыдущих версиях на той же платформе (при тех же параметрах сборки).86- [`repr()`](https://python-all.ru/3.2/library/functions.html#repr) длинного целого больше не включает завершающую `L`, поэтому код, безусловно удаляющий этот символ, вместо этого отрежет последнюю цифру. (Используйте [`str()`](https://python-all.ru/3.2/library/functions.html#str).)87- Восьмеричные литералы больше не имеют формы `0720`; используйте `0o720`.8889### Текст и данные вместо Unicode и 8-битных строк9091Всё, что вы знали о двоичных данных и Unicode, изменилось.9293- Python 3.0 использует понятия *текст* и (двоичные) *данные* вместо строк Unicode и 8-битных строк. Весь текст – Unicode; однако *закодированный* Unicode представляется в виде двоичных данных. Тип, используемый для хранения текста, – [`str`](https://python-all.ru/3.2/library/functions.html#str), тип для хранения данных – [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes). Самое большое отличие от ситуации в 2.x заключается в том, что любая попытка смешать текст и данные в Python 3.0 вызывает [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError), тогда как при смешивании Unicode и 8-битных строк в Python 2.x это работало, если 8-битная строка содержала только 7-битные (ASCII) байты, но при не-ASCII значениях возникало [`UnicodeDecodeError`](https://python-all.ru/3.2/library/exceptions.html#UnicodeDecodeError). Такое поведение, зависящее от значения, много лет вызывало печальные лица.94- В результате этого изменения подхода почти весь код, использующий Unicode, кодировки или двоичные данные, скорее всего, придётся изменить. Это изменение к лучшему, так как в мире 2.x было множество ошибок, связанных со смешиванием закодированного и незакодированного текста. Для подготовки в Python 2.x начните использовать `unicode` для всего незакодированного текста, а [`str`](https://python-all.ru/3.2/library/functions.html#str) – только для двоичных или закодированных данных. Тогда инструмент `2to3` сделает за вас большую часть работы.95- Вы больше не можете использовать литералы `u"..."` для текста Unicode. Однако для двоичных данных необходимо использовать литералы `b"..."`.96- Поскольку типы [`str`](https://python-all.ru/3.2/library/functions.html#str) и [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) нельзя смешивать, необходимо всегда явно преобразовывать между ними. Используйте [`str.encode()`](https://python-all.ru/3.2/library/stdtypes.html#str.encode) для перехода от [`str`](https://python-all.ru/3.2/library/functions.html#str) к [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), и [`bytes.decode()`](https://python-all.ru/3.2/library/stdtypes.html#bytes.decode) для перехода от [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) к [`str`](https://python-all.ru/3.2/library/functions.html#str). Также можно использовать соответственно `bytes(s, encoding=...)` и `str(b, encoding=...)`.97- Подобно [`str`](https://python-all.ru/3.2/library/functions.html#str), тип [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) является неизменяемым. Существует отдельный изменяемый *тип* для хранения буферизованных бинарных данных, [`bytearray`](https://python-all.ru/3.2/library/functions.html#bytearray). Почти все API, принимающие [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), также принимают [`bytearray`](https://python-all.ru/3.2/library/functions.html#bytearray). Изменяемый API основан на [`collections.MutableSequence`](https://python-all.ru/3.2/library/collections.html#collections.MutableSequence).98- Все обратные слеши в сырых строковых литералах трактуются буквально. Это означает, что управляющие последовательности `'\U'` и `'\u'` в сырых строках не обрабатываются особым образом. Например, `r'\u20ac'` в Python 3.0 – это строка из 6 символов, тогда как в Python 2.6 `ur'\u20ac'` был одиночным символом «евро». (Разумеется, это изменение затрагивает только сырые строковые литералы; символ евро в Python 3.0 – это `'\u20ac'`.)99- Встроенный абстрактный тип `basestring` был удалён. Вместо него используйте [`str`](https://python-all.ru/3.2/library/functions.html#str). Типы [`str`](https://python-all.ru/3.2/library/functions.html#str) и [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) не имеют достаточно общей функциональности, чтобы оправдать общий базовый класс. Инструмент `2to3` (см. ниже) заменяет каждое вхождение `basestring` на [`str`](https://python-all.ru/3.2/library/functions.html#str).100- Файлы, открытые как текстовые (по-прежнему режим по умолчанию для [`open()`](https://python-all.ru/3.2/library/functions.html#open)), всегда используют кодировку для преобразования между строками (в памяти) и байтами (на диске). Двоичные файлы (открытые с `b` в аргументе режима) всегда используют байты в памяти. Это означает, что если файл открыт с неправильным режимом или кодировкой, ввод-вывод, скорее всего, завершится громкой ошибкой, а не молча выдаст неверные данные. Это также означает, что даже пользователям Unix придётся указывать правильный режим (текстовый или двоичный) при открытии файла. Существует платформозависимая кодировка по умолчанию, которая на Unix-подобных платформах может быть задана переменной окружения `LANG` (а иногда и некоторыми другими платформозависимыми переменными, связанными с локалью). Во многих, но не во всех случаях системная кодировка по умолчанию – UTF-8; не следует полагаться на это значение по умолчанию. Любое приложение, читающее или записывающее более чем простой ASCII-текст, вероятно, должно иметь возможность переопределить кодировку. Больше нет необходимости использовать потоки с поддержкой кодировок из модуля [`codecs`](https://python-all.ru/3.2/library/codecs.html#module-codecs).101- Начальные значения [`sys.stdin`](https://python-all.ru/3.2/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.2/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.2/library/sys.html#sys.stderr) теперь являются текстовыми файлами только для Unicode (т.е. экземплярами [`io.TextIOBase`](https://python-all.ru/3.2/library/io.html#io.TextIOBase)). Для чтения и записи байтовых данных с помощью этих потоков необходимо использовать их атрибут [`io.TextIOBase.buffer`](https://python-all.ru/3.2/library/io.html#io.TextIOBase.buffer).102- Имена файлов передаются в API и возвращаются из них в виде строк (Unicode). Это может вызывать проблемы, зависящие от платформы, поскольку на некоторых платформах имена файлов представляют собой произвольные байтовые строки. (С другой стороны, в Windows имена файлов изначально хранятся в Unicode.) В качестве обходного решения большинство API (например, [`open()`](https://python-all.ru/3.2/library/functions.html#open) и многие функции модуля [`os`](https://python-all.ru/3.2/library/os.html#module-os)), принимающие имена файлов, принимают как объекты [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), так и строки, а некоторые API позволяют запросить возвращаемое значение в виде [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes). Таким образом, [`os.listdir()`](https://python-all.ru/3.2/library/os.html#os.listdir) возвращает список экземпляров [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), если аргумент является экземпляром [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), а [`os.getcwdb()`](https://python-all.ru/3.2/library/os.html#os.getcwdb) возвращает текущий рабочий каталог как экземпляр [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes). Обратите внимание, что когда [`os.listdir()`](https://python-all.ru/3.2/library/os.html#os.listdir) возвращает список строк, имена файлов, которые не могут быть правильно декодированы, опускаются, а не вызывают [`UnicodeError`](https://python-all.ru/3.2/library/exceptions.html#UnicodeError).103- Некоторые системные API, такие как [`os.environ`](https://python-all.ru/3.2/library/os.html#os.environ) и [`sys.argv`](https://python-all.ru/3.2/library/sys.html#sys.argv), также могут вызывать проблемы, когда байты, предоставленные системой, не интерпретируются с использованием кодировки по умолчанию. Установка переменной `LANG` и повторный запуск программы, вероятно, будет лучшим подходом.104- [**PEP 3138**](https://python-all.ru/3.2/whatsnew/3.0.html): [`repr()`](https://python-all.ru/3.2/library/functions.html#repr) строки больше не экранирует не-ASCII символы. Однако он по-прежнему экранирует управляющие символы и кодовые точки с непередаваемым статусом в стандарте Unicode.105- [**PEP 3120**](https://python-all.ru/3.2/whatsnew/3.0.html): Теперь кодировка исходного кода по умолчанию – UTF-8.106- [**PEP 3131**](https://python-all.ru/3.2/whatsnew/3.0.html): Теперь в идентификаторах допускаются не-ASCII буквы. (Однако стандартная библиотека остаётся ASCII-only, за исключением имён участников в комментариях.)107- Модули `StringIO` и `cStringIO` удалены. Вместо этого нужно импортировать модуль [`io`](https://python-all.ru/3.2/library/io.html#module-io) и использовать [`io.StringIO`](https://python-all.ru/3.2/library/io.html#io.StringIO) или [`io.BytesIO`](https://python-all.ru/3.2/library/io.html#io.BytesIO) для текста и данных соответственно.108- См. также [*Unicode HOWTO*](https://python-all.ru/3.2/howto/unicode.html#unicode-howto), который был обновлён для Python 3.0.109110## Обзор синтаксических изменений111112В этом разделе даётся краткий обзор всех *синтаксических* изменений в Python 3.0.113114### Новый синтаксис115116- [**PEP 3107**](https://python-all.ru/3.2/whatsnew/3.0.html): Аннотации аргументов функций и возвращаемых значений. Они предоставляют стандартизированный способ аннотирования параметров и возвращаемого значения функции. К таким аннотациям не привязана никакая семантика, за исключением того, что их можно исследовать во время выполнения с помощью атрибута `__annotations__`. Цель – поощрить эксперименты через метаклассы, декораторы или фреймворки.117- [**PEP 3102**](https://python-all.ru/3.2/whatsnew/3.0.html): Аргументы, передаваемые только по ключу. Именованные параметры, следующие после `*args` в списке параметров, *должны* быть указаны с использованием синтаксиса ключевых слов при вызове. Также можно использовать голую `*` в списке параметров, чтобы указать, что функция не принимает список аргументов переменной длины, но принимает аргументы только по ключу.118- Ключевые аргументы допускаются после списка базовых классов в определении класса. Это используется в новом соглашении для указания метакласса (см. следующий раздел), но может использоваться и для других целей, при условии, что метакласс это поддерживает.119- [**PEP 3104**](https://python-all.ru/3.2/whatsnew/3.0.html): Оператор [`nonlocal`](https://python-all.ru/3.2/reference/simple_stmts.html#nonlocal). С помощью `nonlocal x` теперь можно напрямую присваивать значение переменной во внешней (но не глобальной) области видимости. [`nonlocal`](https://python-all.ru/3.2/reference/simple_stmts.html#nonlocal) – новое зарезервированное слово.120- [**PEP 3132**](https://python-all.ru/3.2/whatsnew/3.0.html): Расширенная распаковка итерируемых объектов. Теперь можно писать такие конструкции, как `a, b, *rest = some_sequence`. И даже `*rest, a = stuff`. Объект `rest` всегда является (возможно, пустым) списком; правая часть может быть любым итерируемым объектом. Пример:121122  ```python123  (a, *rest, b) = range(5)124  ```125126  Это устанавливает *a* в `0`, *b* в `4`, а *rest* в `[1, 2, 3]`.127- Словарные включения: `{k: v for k, v in stuff}` означает то же самое, что и `dict(stuff)`, но более гибко. (Это [**PEP 0274**](https://python-all.ru/3.2/whatsnew/3.0.html) оправдан. :-)128- Литералы множеств, например `{1, 2}`. Обратите внимание, что `{}` – это пустой словарь; для пустого множества используйте `set()`. Также поддерживаются включения множеств; например, `{x for x in stuff}` означает то же самое, что и `set(stuff)`, но более гибко.129- Новые восьмеричные литералы, например `0o720` (уже были в 2.6). Старые восьмеричные литералы (`0720`) удалены.130- Новые двоичные литералы, например `0b1010` (уже были в 2.6), и появилась соответствующая встроенная функция [`bin()`](https://python-all.ru/3.2/library/functions.html#bin).131- Литералы байтов вводятся с префиксом `b` или `B`, и появилась соответствующая встроенная функция [`bytes()`](https://python-all.ru/3.2/library/functions.html#bytes).132133### Изменённый синтаксис134135- [**PEP 3109**](https://python-all.ru/3.2/whatsnew/3.0.html) и [**PEP 3134**](https://python-all.ru/3.2/whatsnew/3.0.html): новый синтаксис оператора [`raise`](https://python-all.ru/3.2/reference/simple_stmts.html#raise): `raise [expr [from expr]]`. См. ниже.136- [`as`](https://python-all.ru/3.2/reference/compound_stmts.html#as) и [`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with) теперь являются зарезервированными словами. (На самом деле уже начиная с 2.6.)137- `True`, `False` и `None` являются зарезервированными словами. (2.6 уже частично вводила ограничения на `None`.)138- Изменение с [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except) *exc*, *var* на [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except) *exc* [`as`](https://python-all.ru/3.2/reference/compound_stmts.html#as) *var*. См. [**PEP 3110**](https://python-all.ru/3.2/whatsnew/3.0.html).139- [**PEP 3115**](https://python-all.ru/3.2/whatsnew/3.0.html): Новый синтаксис метаклассов. Вместо:140141  ```python142  class C:143      __metaclass__ = M144      ...145  ```146147  теперь необходимо использовать:148149  ```python150  class C(metaclass=M):151      ...152  ```153154  Модульная глобальная переменная `__metaclass__` больше не поддерживается. (Это был костыль, упрощавший переход на классы нового стиля по умолчанию без необходимости наследовать каждый класс от [`object`](https://python-all.ru/3.2/library/functions.html#object).)155- List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a [`list()`](https://python-all.ru/3.2/library/functions.html#list) constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.156- *Многоточие* (`...`) теперь можно использовать как атомарное выражение в любом месте. (Раньше оно допускалось только в срезах.) Кроме того, теперь его *необходимо* писать как `...`. (Раньше его можно было писать как `. . .`, просто из-за случайности грамматики.)157158### Удалённый синтаксис159160- [**PEP 3113**](https://python-all.ru/3.2/whatsnew/3.0.html): Распаковка кортежных параметров удалена. Больше нельзя писать `def foo(a, (b, c)): ...`. Вместо этого используйте `def foo(a, b_c): b, c = b_c`.161- Удалены обратные кавычки (вместо них используйте [`repr()`](https://python-all.ru/3.2/library/functions.html#repr)).162- Удалено `<>` (используйте `!=` вместо этого).163- Удалено ключевое слово: [`exec()`](https://python-all.ru/3.2/library/functions.html#exec) больше не является ключевым словом; оно остаётся как функция. (К счастью, синтаксис функции также поддерживался в 2.x.) Также обратите внимание, что [`exec()`](https://python-all.ru/3.2/library/functions.html#exec) больше не принимает аргумент-поток; вместо `exec(f)` можно использовать `exec(f.read())`.164- Целочисленные литералы больше не поддерживают завершающий `l` или `L`.165- Строковые литералы больше не поддерживают ведущий префикс `u` или `U`.166- Синтаксис [`from`](https://python-all.ru/3.2/reference/simple_stmts.html#from) *module* [`import`](https://python-all.ru/3.2/reference/simple_stmts.html#import) `*` разрешён только на уровне модуля, больше не внутри функций.167- Единственный приемлемый синтаксис для относительных импортов: `from .[module] import name`. Все формы [`import`](https://python-all.ru/3.2/reference/simple_stmts.html#import), не начинающиеся с `.`, интерпретируются как абсолютные импорты. ([**PEP 0328**](https://python-all.ru/3.2/whatsnew/3.0.html))168- Классические классы удалены.169170## Изменения, уже присутствовавшие в Python 2.6171172Поскольку многие пользователи, вероятно, переходят напрямую с Python 2.5 на Python 3.0, этот раздел напоминает о новых возможностях, которые изначально были разработаны для Python 3.0, но были перенесены в Python 2.6. Для более подробных описаний следует обращаться к соответствующим разделам в [*Что нового в Python 2.6*](https://python-all.ru/3.2/whatsnew/2.6.html#whats-new-in-2-6).173174- [*PEP 343: Оператор 'with'*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-0343). Оператор [`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with) теперь является стандартной возможностью и больше не требует импорта из [`__future__`](https://python-all.ru/3.2/library/__future__.html#module-__future__). Также обратите внимание на [*Writing Context Managers*](https://python-all.ru/3.2/whatsnew/2.6.html#new-26-context-managers) и [*The contextlib module*](https://python-all.ru/3.2/whatsnew/2.6.html#new-module-contextlib).175- [*PEP 366: Явные относительные импорты из главного модуля*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-0366). Это улучшает полезность опции [*-m*](https://python-all.ru/3.2/using/cmdline.html#cmdoption-m), когда указанный модуль находится в пакете.176- [*PEP 370: Каталог site-packages для каждого пользователя*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-0370).177- [*PEP 371: Пакет multiprocessing*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-0371).178- [*PEP 3101: Расширенное форматирование строк*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3101). Примечание: описание в 2.6 упоминает метод [`format()`](https://python-all.ru/3.2/library/functions.html#format) как для 8-битных, так и для Unicode строк. В 3.0 только тип [`str`](https://python-all.ru/3.2/library/functions.html#str) (текстовые строки с поддержкой Unicode) поддерживает этот метод; тип [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) – нет. Планируется со временем сделать это единственным API для форматирования строк и начать объявление оператора `%` устаревшим в Python 3.1.179- [*PEP 3105: print как функция*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3105). Теперь это стандартная возможность, и её больше не нужно импортировать из [`__future__`](https://python-all.ru/3.2/library/__future__.html#module-__future__). Более подробно было описано выше.180- [*PEP 3110: Изменения в обработке исключений*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3110). Синтаксис [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except) *exc* [`as`](https://python-all.ru/3.2/reference/compound_stmts.html#as) *var* теперь является стандартным, а [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except) *exc*, *var* больше не поддерживается. (Конечно, часть [`as`](https://python-all.ru/3.2/reference/compound_stmts.html#as) *var* по-прежнему является необязательной.)181- [*PEP 3112: Байтовые литералы*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3112). Синтаксис строкового литерала `b"..."` (и его варианты, такие как `b'...'`, `b"""..."""` и `br"..."`) теперь создаёт литерал типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes).182- [*PEP 3116: Новая библиотека ввода-вывода*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3116). Модуль [`io`](https://python-all.ru/3.2/library/io.html#module-io) теперь является стандартным способом выполнения файлового ввода-вывода. Встроенная функция [`open()`](https://python-all.ru/3.2/library/functions.html#open) теперь является псевдонимом для [`io.open()`](https://python-all.ru/3.2/library/io.html#io.open) и имеет дополнительные именованные аргументы *encoding*, *errors*, *newline* и *closefd*. Также обратите внимание, что недопустимый аргумент *mode* теперь вызывает [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError), а не [`IOError`](https://python-all.ru/3.2/library/exceptions.html#IOError). Двоичный файловый объект, лежащий в основе текстового файлового объекта, можно получить через `f.buffer` (но учтите, что текстовый объект поддерживает собственный буфер для ускорения операций кодирования и декодирования).183- [*PEP 3118: Пересмотренный протокол буфера*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3118). Старая встроенная функция `buffer()` теперь действительно удалена; новая встроенная функция [`memoryview()`](https://python-all.ru/3.2/library/stdtypes.html#memoryview) предоставляет (в основном) аналогичную функциональность.184- [*PEP 3119: Абстрактные базовые классы*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3119). Модуль [`abc`](https://python-all.ru/3.2/library/abc.html#module-abc) и ABC, определённые в модуле [`collections`](https://python-all.ru/3.2/library/collections.html#module-collections), теперь играют более заметную роль в языке, а встроенные типы коллекций, такие как [`dict`](https://python-all.ru/3.2/library/stdtypes.html#dict) и [`list`](https://python-all.ru/3.2/library/functions.html#list), соответствуют ABC [`collections.MutableMapping`](https://python-all.ru/3.2/library/collections.html#collections.MutableMapping) и [`collections.MutableSequence`](https://python-all.ru/3.2/library/collections.html#collections.MutableSequence) соответственно.185- [*PEP 3127: Поддержка и синтаксис целочисленных литералов*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3127). Как упоминалось выше, новая нотация восьмеричных литералов является единственной поддерживаемой, а также были добавлены двоичные литералы.186- [*PEP 3129: Декораторы классов*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3129).187- [*PEP 3141: Иерархия типов для чисел*](https://python-all.ru/3.2/whatsnew/2.6.html#pep-3141). Модуль [`numbers`](https://python-all.ru/3.2/library/numbers.html#module-numbers) – ещё одно новое применение ABC; он определяет «числовую башню» Python. Также обратите внимание на новый модуль [`fractions`](https://python-all.ru/3.2/library/fractions.html#module-fractions), реализующий [`numbers.Rational`](https://python-all.ru/3.2/library/numbers.html#numbers.Rational).188189## Изменения в библиотеке190191Из-за нехватки времени этот документ не охватывает все обширные изменения в стандартной библиотеке. [**PEP 3108**](https://python-all.ru/3.2/whatsnew/3.0.html) является справочником по основным изменениям в библиотеке. Вот краткий обзор:192193- Много старых модулей было удалено. Некоторые, такие как `gopherlib` (больше не используется) и `md5` (заменён на [`hashlib`](https://python-all.ru/3.2/library/hashlib.html#module-hashlib)), уже были объявлены устаревшими согласно [**PEP 0004**](https://python-all.ru/3.2/whatsnew/3.0.html). Другие были удалены в результате прекращения поддержки различных платформ, таких как Irix, BeOS и Mac OS 9 (см. [**PEP 0011**](https://python-all.ru/3.2/whatsnew/3.0.html)). Некоторые модули также были отобраны для удаления в Python 3.0 из-за отсутствия использования или наличия лучшей замены. Полный список см. в [**PEP 3108**](https://python-all.ru/3.2/whatsnew/3.0.html).194- Пакет `bsddb3` был удалён, потому что его присутствие в основной стандартной библиотеке со временем стало существенным бременем для разработчиков ядра из-за нестабильности тестирования и графика выпуска Berkeley DB. Однако пакет жив и здоров, он поддерживается внешне по адресу [http://www.jcea.es/programacion/pybsddb.htm](https://python-all.ru/3.2/whatsnew/3.0.html).195- Некоторые модули были переименованы, потому что их старые названия нарушали [**PEP 0008**](https://python-all.ru/3.2/whatsnew/3.0.html) или по другим причинам. Вот список:196197  | Старое имя | Новое название |198  | --- | --- |199  | \_winreg | winreg |200  | ConfigParser | configparser |201  | copy\_reg | copyreg |202  | очередь | очередь |203  | SocketServer | socketserver |204  | markupbase | \_markupbase |205  | repr | reprlib |206  | test.test\_support | test.support |207- Распространённый шаблон в Python 2.x – иметь одну версию модуля, реализованную на чистом Python, и дополнительную ускоренную версию, реализованную в виде C-расширения; например, [`pickle`](https://python-all.ru/3.2/library/pickle.html#module-pickle) и `cPickle`. Это заставляет каждого пользователя этих модулей нести бремя импортирования ускоренной версии и возврата к чистой Python-версии. В Python 3.0 ускоренные версии считаются деталями реализации чистых Python-версий. Пользователи должны всегда импортировать стандартную версию, которая пытается импортировать ускоренную версию и возвращается к чистой Python-версии. Пара [`pickle`](https://python-all.ru/3.2/library/pickle.html#module-pickle) / `cPickle` получила такое же обращение. Модуль [`profile`](https://python-all.ru/3.2/library/profile.html#module-profile) в списке на 3.1. Модуль `StringIO` превратился в класс в модуле [`io`](https://python-all.ru/3.2/library/io.html#module-io).208- Некоторые связанные модули были сгруппированы в пакеты, и обычно имена подмодулей были упрощены. Получившиеся новые пакеты:209210  - [`dbm`](https://python-all.ru/3.2/library/dbm.html#module-dbm) (`anydbm`, `dbhash`, [`dbm`](https://python-all.ru/3.2/library/dbm.html#module-dbm), `dumbdbm`, `gdbm`, `whichdb`).211  - [`html`](https://python-all.ru/3.2/library/html.html#module-html) (`HTMLParser`, `htmlentitydefs`).212  - `http` (`httplib`, `BaseHTTPServer`, `CGIHTTPServer`, `SimpleHTTPServer`, `Cookie`, `cookielib`).213  - [`tkinter`](https://python-all.ru/3.2/library/tkinter.html#module-tkinter) (все модули, связанные с `Tkinter`, кроме [`turtle`](https://python-all.ru/3.2/library/turtle.html#module-turtle)). Целевая аудитория [`turtle`](https://python-all.ru/3.2/library/turtle.html#module-turtle) мало заботится о [`tkinter`](https://python-all.ru/3.2/library/tkinter.html#module-tkinter). Также обратите внимание, что начиная с Python 2.6 функциональность [`turtle`](https://python-all.ru/3.2/library/turtle.html#module-turtle) была значительно расширена.214  - `urllib` (`urllib`, `urllib2`, `urlparse`, `robotparse`).215  - `xmlrpc` (`xmlrpclib`, `DocXMLRPCServer`, `SimpleXMLRPCServer`).216217Некоторые другие изменения в модулях стандартной библиотеки, не охваченные [**PEP 3108**](https://python-all.ru/3.2/whatsnew/3.0.html):218219- Удалён модуль `sets`. Используйте встроенный класс [`set()`](https://python-all.ru/3.2/library/stdtypes.html#set).220- Очистка модуля [`sys`](https://python-all.ru/3.2/library/sys.html#module-sys): удалены `sys.exitfunc()`, `sys.exc_clear()`, `sys.exc_type`, `sys.exc_value`, `sys.exc_traceback`. (Обратите внимание, что [`sys.last_type`](https://python-all.ru/3.2/library/sys.html#sys.last_type) и т.д. остаются.)221- Очистка типа [`array.array`](https://python-all.ru/3.2/library/array.html#array.array): методы `read()` и `write()` удалены; используйте вместо них `fromfile()` и `tofile()`. Кроме того, код типа `'c'` для array удалён – используйте либо `'b'` для байтов, либо `'u'` для символов Unicode.222- Очистка модуля [`operator`](https://python-all.ru/3.2/library/operator.html#module-operator): удалены `sequenceIncludes()` и `isCallable()`.223- Очистка модуля `thread`: `acquire_lock()` и `release_lock()` удалены; используйте вместо них `acquire()` и `release()`.224- Очистка модуля [`random`](https://python-all.ru/3.2/library/random.html#module-random): удалён API `jumpahead()`.225- Модуль `new` удалён.226- Функции `os.tmpnam()`, `os.tempnam()` и `os.tmpfile()` удалены в пользу модуля [`tempfile`](https://python-all.ru/3.2/library/tempfile.html#module-tempfile).227- Модуль [`tokenize`](https://python-all.ru/3.2/library/tokenize.html#module-tokenize) изменён для работы с байтами. Основной точкой входа теперь является [`tokenize.tokenize()`](https://python-all.ru/3.2/library/tokenize.html#tokenize.tokenize), а не generate\_tokens.228- `string.letters` и его собратья (`string.lowercase` и `string.uppercase`) удалены. Вместо них используйте [`string.ascii_letters`](https://python-all.ru/3.2/library/string.html#string.ascii_letters) и т.д. (Причина удаления в том, что `string.letters` и его собратья имели поведение, зависящее от локали, что является плохой идеей для таких привлекательно названных глобальных «констант».)229- Модуль `__builtin__` переименован в [`builtins`](https://python-all.ru/3.2/library/builtins.html#module-builtins) (удалены подчёркивания, добавлена буква ‘s’). Переменная `__builtins__`, присутствующая в большинстве глобальных пространств имён, не изменилась. Чтобы изменить встроенный объект, следует использовать [`builtins`](https://python-all.ru/3.2/library/builtins.html#module-builtins), а не `__builtins__`!230231## [**PEP 3101**](https://python-all.ru/3.2/whatsnew/3.0.html): Новый подход к форматированию строк232233- Новая система встроенных операций форматирования строк заменяет оператор форматирования строк `%`. (Однако оператор `%` по-прежнему поддерживается; он будет объявлен устаревшим в Python 3.1 и удален из языка в более поздней версии.) Прочтите [**PEP 3101**](https://python-all.ru/3.2/whatsnew/3.0.html) для получения полной информации.234235## Изменения в исключениях236237API для возбуждения и перехвата исключений были очищены и добавлены новые мощные возможности:238239- [**PEP 0352**](https://python-all.ru/3.2/whatsnew/3.0.html): Все исключения должны быть порождены (прямо или косвенно) от [`BaseException`](https://python-all.ru/3.2/library/exceptions.html#BaseException). Это корень иерархии исключений. Это не ново как рекомендация, но *требование* наследования от [`BaseException`](https://python-all.ru/3.2/library/exceptions.html#BaseException) является новым. (Python 2.6 всё ещё позволял вызывать классические классы и не накладывал ограничений на то, что можно перехватывать.) Как следствие, строковые исключения наконец-то действительно и окончательно мертвы.240- Почти все исключения на самом деле должны наследовать от [`Exception`](https://python-all.ru/3.2/library/exceptions.html#Exception); [`BaseException`](https://python-all.ru/3.2/library/exceptions.html#BaseException) следует использовать только как базовый класс для исключений, которые должны обрабатываться только на верхнем уровне, таких как [`SystemExit`](https://python-all.ru/3.2/library/exceptions.html#SystemExit) или [`KeyboardInterrupt`](https://python-all.ru/3.2/library/exceptions.html#KeyboardInterrupt). Рекомендуемый способ обработки всех исключений, кроме последней категории, – использовать [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except) [`Exception`](https://python-all.ru/3.2/library/exceptions.html#Exception).241- `StandardError` был удалён.242- Исключения больше не ведут себя как последовательности. Вместо этого используйте атрибут `args`.243- [**PEP 3109**](https://python-all.ru/3.2/whatsnew/3.0.html): Генерация исключений. Теперь необходимо использовать `raise Exception(args)` вместо `raise Exception, args`. Кроме того, больше нельзя явно указывать traceback; вместо этого, если *нужно* это сделать, можно напрямую присвоить значение атрибуту `__traceback__` (см. ниже).244- [**PEP 3110**](https://python-all.ru/3.2/whatsnew/3.0.html): Перехват исключений. Теперь необходимо использовать `except SomeException as variable` вместо `except SomeException, variable`. Более того, переменная *variable* явно удаляется при выходе из блока [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except).245- [**PEP 3134**](https://python-all.ru/3.2/whatsnew/3.0.html): Цепочки исключений. Есть два случая: неявная цепочка и явная цепочка. Неявная цепочка возникает, когда исключение возбуждается в блоке обработчика [`except`](https://python-all.ru/3.2/reference/compound_stmts.html#except) или [`finally`](https://python-all.ru/3.2/reference/compound_stmts.html#finally). Обычно это происходит из-за ошибки в блоке обработчика; мы называем это *вторичным* исключением. В этом случае исходное исключение (которое обрабатывалось) сохраняется как атрибут `__context__` вторичного исключения. Явная цепочка вызывается следующим синтаксисом:246247  ```python248  raise SecondaryException() from primary_exception249  ```250251  (где *primary\_exception* – любое выражение, возвращающее объект исключения, вероятно, исключение, которое было перехвачено ранее). В этом случае первичное исключение сохраняется в атрибуте `__cause__` вторичного исключения. При печати трассировки необработанного исключения происходит обход цепочки атрибутов `__cause__` и `__context__` и для каждого компонента цепочки печатается отдельная трассировка, причём первичное исключение находится вверху. (Пользователи Java могут узнать это поведение.)252- [**PEP 3134**](https://python-all.ru/3.2/whatsnew/3.0.html): Объекты исключений теперь хранят свою трассировку в атрибуте `__traceback__`. Это означает, что объект исключения теперь содержит всю информацию, относящуюся к исключению, и стало меньше причин использовать [`sys.exc_info()`](https://python-all.ru/3.2/library/sys.html#sys.exc_info) (хотя последнее не удалено).253- Некоторые сообщения об исключениях улучшены, когда Windows не удаётся загрузить модуль расширения. Например, `error code 193` теперь `%1 is not a valid Win32 application`. Строки теперь работают с неанглийскими локолями.254255## Разные другие изменения256257### Операторы и специальные методы258259- `!=` теперь возвращает противоположное от `==`, если только `==` не возвращает [`NotImplemented`](https://python-all.ru/3.2/library/constants.html#NotImplemented).260- Концепция «несвязанных методов» удалена из языка. При обращении к методу как к атрибуту класса теперь получается обычный объект функции.261- `__getslice__()`, `__setslice__()` и `__delslice__()` были убиты. Синтаксис `a[i:j]` теперь преобразуется в `a.__getitem__(slice(i, j))` (или [`__setitem__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__setitem__) или [`__delitem__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__delitem__), при использовании в качестве цели присваивания или удаления, соответственно).262- [**PEP 3114**](https://python-all.ru/3.2/whatsnew/3.0.html): стандартный метод [`next()`](https://python-all.ru/3.2/library/functions.html#next) переименован в [`__next__()`](https://python-all.ru/3.2/library/stdtypes.html#iterator.__next__).263- Специальные методы `__oct__()` и `__hex__()` удалены – [`oct()`](https://python-all.ru/3.2/library/functions.html#oct) и [`hex()`](https://python-all.ru/3.2/library/functions.html#hex) теперь используют [`__index__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__index__) для преобразования аргумента в целое число.264- Удалена поддержка `__members__` и `__methods__`.265- Атрибуты функций с именами вида `func_X` были переименованы в форму `__X__`, освобождая эти имена в пространстве атрибутов функции для пользовательских атрибутов. А именно, `func_closure`, `func_code`, `func_defaults`, `func_dict`, `func_doc`, `func_globals`, `func_name` были переименованы в `__closure__`, `__code__`, `__defaults__`, `__dict__`, `__doc__`, `__globals__`, `__name__`, соответственно.266- `__nonzero__()` теперь [`__bool__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__bool__).267268### Встроенные функции269270- [**PEP 3135**](https://python-all.ru/3.2/whatsnew/3.0.html): Новая [`super()`](https://python-all.ru/3.2/library/functions.html#super). Теперь можно вызывать [`super()`](https://python-all.ru/3.2/library/functions.html#super) без аргументов, и (предполагая, что это внутри обычного метода экземпляра, определённого внутри инструкции [`class`](https://python-all.ru/3.2/reference/compound_stmts.html#class)) правильный класс и экземпляр будут выбраны автоматически. С аргументами поведение [`super()`](https://python-all.ru/3.2/library/functions.html#super) не изменилось.271- [**PEP 3111**](https://python-all.ru/3.2/whatsnew/3.0.html): `raw_input()` была переименована в [`input()`](https://python-all.ru/3.2/library/functions.html#input). То есть новая функция [`input()`](https://python-all.ru/3.2/library/functions.html#input) читает строку из [`sys.stdin`](https://python-all.ru/3.2/library/sys.html#sys.stdin) и возвращает её с удалённым завершающим переводом строки. Она возбуждает [`EOFError`](https://python-all.ru/3.2/library/exceptions.html#EOFError), если ввод преждевременно завершён. Чтобы получить старое поведение [`input()`](https://python-all.ru/3.2/library/functions.html#input), используйте `eval(input())`.272- Была добавлена новая встроенная функция [`next()`](https://python-all.ru/3.2/library/functions.html#next) для вызова метода [`__next__()`](https://python-all.ru/3.2/library/stdtypes.html#iterator.__next__) объекта.273- Стратегия округления и тип возвращаемого значения функции [`round()`](https://python-all.ru/3.2/library/functions.html#round) изменились. Теперь точные половинные значения округляются до ближайшего чётного результата, а не в сторону от нуля. (Например, `round(2.5)` теперь возвращает `2`, а не `3`.) `round(x[, n])()` теперь делегирует работу `x.__round__([n])` вместо того, чтобы всегда возвращать число с плавающей точкой. Обычно она возвращает целое число при вызове с одним аргументом и значение того же типа, что и `x`, при вызове с двумя аргументами.274- Функция `intern()` перенесена в [`sys.intern()`](https://python-all.ru/3.2/library/sys.html#sys.intern).275- Удалено: `apply()`. Вместо `apply(f, args)` используйте `f(*args)`.276- Удалена функция [`callable()`](https://python-all.ru/3.2/library/functions.html#callable). Вместо `callable(f)` можно использовать `isinstance(f, collections.Callable)`. Функция `operator.isCallable()` также удалена.277- Удалена функция `coerce()`. Эта функция больше не нужна, поскольку классические классы удалены.278- Удалена функция `execfile()`. Вместо `execfile(fn)` используйте `exec(open(fn).read())`.279- Удалён тип `file`. Используйте [`open()`](https://python-all.ru/3.2/library/functions.html#open). Теперь существует несколько различных видов потоков данных, которые может возвращать open, в модуле [`io`](https://python-all.ru/3.2/library/io.html#module-io).280- Удалено `reduce()`. Используйте [`functools.reduce()`](https://python-all.ru/3.2/library/functools.html#functools.reduce), если это действительно необходимо; однако в 99% случаев явный [`for`](https://python-all.ru/3.2/reference/compound_stmts.html#for) цикл читается лучше.281- Удалено `reload()`. Используйте [`imp.reload()`](https://python-all.ru/3.2/library/imp.html#imp.reload).282- Удалено. `dict.has_key()` – используйте оператор [`in`](https://python-all.ru/3.2/reference/expressions.html#in).283284## Изменения в сборке и C API285286Из-за нехватки времени приведён *очень* неполный список изменений C API.287288- Поддержка нескольких платформ прекращена, включая, но не ограничиваясь Mac OS 9, BeOS, RISCOS, Irix и Tru64.289- [**PEP 3118**](https://python-all.ru/3.2/whatsnew/3.0.html): Новый буферный API.290- [**PEP 3121**](https://python-all.ru/3.2/whatsnew/3.0.html): Инициализация и финализация модулей расширения.291- [**PEP 3123**](https://python-all.ru/3.2/whatsnew/3.0.html): приведение [`PyObject_HEAD`](https://python-all.ru/3.2/c-api/structures.html#PyObject_HEAD) в соответствие со стандартом C.292- Больше нет поддержки C API для ограниченного выполнения.293- `PyNumber_Coerce()`, `PyNumber_CoerceEx()`, `PyMember_Get()` и `PyMember_Set()` удалены из C API.294- Новый C API [`PyImport_ImportModuleNoBlock()`](https://python-all.ru/3.2/c-api/import.html#PyImport_ImportModuleNoBlock) работает как [`PyImport_ImportModule()`](https://python-all.ru/3.2/c-api/import.html#PyImport_ImportModule), но не блокируется на блокировке импорта (вместо этого возвращается ошибка).295- Переименованы слот и метод на уровне C для преобразования в булево значение: `nb_nonzero` теперь называется `nb_bool`.296- Из C API удалены `METH_OLDARGS` и `WITH_CYCLE_GC`.297298## Производительность299300Чистым результатом обобщений в версии 3.0 является то, что Python 3.0 выполняет тест pystone примерно на 10% медленнее, чем Python 2.5. Скорее всего, главная причина – удаление специальной обработки для малых целых чисел. Есть возможность для улучшения, но это произойдёт после выхода версии 3.0!301302## Перенос на Python 3.0303304Для переноса существующего исходного кода с Python 2.5 или 2.6 на Python 3.0 лучшая стратегия – следующая:3053060. (Предварительное условие:) Начните с отличного тестового покрытия.3071. Перенесите код на Python 2.6. Эта работа должна быть не сложнее обычного переноса с Python 2.x на Python 2.(x+1). Убедитесь, что все тесты проходят успешно.3082. (Всё ещё используя 2.6:) Включите флаг командной строки *-3*. Это включает предупреждения о возможностях, которые будут удалены (или изменены) в 3.0. Снова запустите свой набор тестов и исправляйте код, на который выдаются предупреждения, пока предупреждений не останется, а все тесты по-прежнему проходят.3093. Запустите транслятор исходного кода `2to3` на вашем дереве исходного кода. (Подробнее об этом инструменте см. [*2to3 - автоматическая трансляция кода Python 2 в Python 3*](https://python-all.ru/3.2/library/2to3.html#to3-reference).) Запустите результат трансляции под Python 3.0. Вручную исправьте все оставшиеся проблемы, устраняя ошибки, пока все тесты снова не пройдут.310311Не рекомендуется пытаться писать исходный код, который без изменений работает и в Python 2.6, и в Python 3.0; для этого пришлось бы использовать очень изощрённый стиль кодирования, например, избегать `print`-инструкций, метаклассов, и многого другого. Если вы поддерживаете библиотеку, которая должна работать и с Python 2.6, и с Python 3.0, лучший подход – изменить шаг 3 выше, редактируя версию исходного кода для Python 2.6 и снова запуская `2to3` транслятор, вместо того чтобы редактировать версию исходного кода для Python 3.0.312313По вопросам переноса расширений на C в Python 3.0 обратитесь к разделу [*Перенос модулей расширений на Python 3*](https://python-all.ru/3.2/howto/cporting.html#cporting-howto).314