Python/Что нового в Python 2.6

Документация Python
Эта статья — часть Документации по языку Python

Что нового в Python 2.6? [*] править

Исходный текст http://docs.python.org/whatsnew/2.6.html
Автор А.М. Качлин (A.M. Kuchling) (amk на amk.ca)
Релиз 2.6.1
Версия от 9 января 2009


Описание [*] править

Эта статья расскажет вам о новых возможностях Python 2.6 вышедшем 1 октября 2008. Информация о выпуске описывается в PEP 361.

Основной темой Python 2.6 это подготовка к переходу на Python 3.0, на основной редизайн языка. Если это возможно, Python 2.6 включает новые функции и возможности из версии 3.0 сохраняя при этом старые возможности или синтаксис.

Python 3.0 [-] править

Изменения в процессе разработки [*] править

Пока разрабатывался Python 2.6, в процессе разработки произошло два значительных изменения: мы сменили систему контроля задач SourceForge на специально настроенную Roundup и документация была преобразована из LaTeX в reStructuredText.

Новая система контроля задач: Roundup [*] править

В течение долгого времени разработчиков Python раздражал журнал ошибок SourceForge. Использование SourceForge не давало нужной гибкости; например, не было возможности настроить жизненный цикл задач.

Комитет Python Software Foundation начал поиск планировщиков задач, прося добровольцев установить различные продукты и импортировать некоторые ошибки из SourceForge. Было проверено четыре различных планировщика задач: Jira, Launchpad, Roundup и Trac. Вскоре комитет остановился на двух кандидатах: Jira и Roundup. Jira коммерческий продукт, который предоставляет бесплатные решения для проектов свободного ПО. Roundup это проект с открытым исходным кодом, который нуждается в добровольцах для администрирования и в сервере для размещения.

Новый формат документации: текст, переСтруктурированный с использованием Sphynx [-] править

PEP 343: Оператор ‘with[*] править

Оператор with появился в предыдущей версии Python - 2.5 - как необязательный и включался директивой from __future__ import with_statement. В Python 2.6 оператор with доступен всегда, а значит он является зарезервированным словом. Дальнейшее изложение повторяет информацию из "Что нового в Python 2.5" и может быть пропущено, если вы уже знакомы с описываемым оператором.

Оператор with упрощает код, который раньше использовал блоки try...finally для гарантированного исполнения завершающего кода. Здесь мы рассмотрим типичные применения оператора, а в следующем параграфе - детали реализации и возможность написания объектов, которые можно использовать с данным оператором.

Оператор with является еще одним оператором управления потоком команд и имеет следующий основной синтаксис:

with выражение [as переменная]:
    блок кода

Здесь выражение вычисляется, и результатом его вычисления должен быть объект, поддерживающий протокол управления контекстом (context management), то есть иметь методы __enter__() and __exit__().

Метод __enter__() упомянутого выше объекта вызывается до вычисления блока кода, а значит, в нем можно выполнить необходимые подготовительные операции. Этот метод может вернуть некоторое значение, которое будет связано с переменной, если такая задана. Внимание: переменной присваивается не значение вычисленного выражения, а именно результат метода __enter__().

После выполнения блока кода выполняется метод __exit__(), даже если в блоке произошло исключение. Таким образом, этот метод может гарантированно выполнить необходимые операции восстановления.

Некоторые стандартные объекты Python уже поддерживают протокол управления контекстом и могут быть использованы в операторе with. Файловые объекты являются одним из примеров:

with open('/etc/passwd', 'r') as f:
    for line in f:
        print(line)

После выполнения этого оператора файловый объект f будет автоматически закрыт даже если внутри цикла возникнет исключение.


Замки и условные переменные модуля threading также поддерживают оператор with:

lock = threading.Lock()
with lock:
    # Критическая секция кода
    ...

До выполнения критической секции замок закрывается и всегда открывается при выходе из нее.

Функция localcontext() из модуля decimal помогает сохранить и затем восстановить текущие настройки, такие как требуемую точность и характеристики округления при вычислениях:

from decimal import Decimal, Context, localcontext

# Печатать, используя точность по умолчанию (28 цифр)
v = Decimal('578')
print v.sqrt()

with localcontext(Context(prec=16)):
    # Весь код в этом блоке использует точность в 16 цифр.
    print v.sqrt()
# Первоначальные настройки восстанавливаются по выходе из блока

Написание менеджеров контекста [-] править

Модуль contextlib [-] править

PEP 366: Относительное явное импортирование из главного модуля [-] править

PEP 370: Каталог site-packages для каждого пользователя [-] править

PEP 371: Пакет multiprocessing [-] править

PEP 3101: Современное форматирование строк [-] править

PEP 3105: print в роли функции [-] править

PEP 3110: Изменения в обработке исключений [-] править

PEP 3112: Байтовые литералы [-] править

PEP 3116: Новая библиотека ввода/вывода [-] править

PEP 3118: Исправленный протокол буфера [-] править

PEP 3119: Абстрактные базовые классы [-] править

PEP 3127: Поддержка целочисленного литерала и его синтаксис [-] править

PEP 3129: Декораторы классов [-] править

PEP 3141: Иерархия числовых типов [-] править

Модуль fractions [-] править

Другие изменения в языке [-] править

Оптимизация [-] править

Изменения в интерпретаторе [-] править

Новые, улучшенные и нерекомендуемые модули [-] править

Модуль ast [-] править

Модуль future_builtins [-] править

Модуль json: JavaScript Object Notation[1] [-] править

Модуль plistlib: Разбор списков свойств[2] [-] править

Расширение ctypes [-] править

Улучшенная поддержка SSL [-] править

Изменения в процессе сборки и в C API [-] править

Изменения, специфичные для порта Windows [-] править

Изменения, специфичные для порта Mac OS X [-] править

Изменения, специфичные для порта IRIX [-] править

Перенос кода на Python 2.6 [-] править

Благодарности [-] править


  1. (Прим. перев) Нотация объектов языка JavaScript
  2. (Прим. перев) Property-List: .plist