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

Дятел