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

Материал из Викиучебника

Перейти к: навигация, поиск
Источник=http://www.python.org/community/logos Документация 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 [-]

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

[править] Новая система контроля задач: 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 будет автоматически закрыт даже если внутри цикла возникнет исключение.

⚠
В данном случае f - это объект, созданный open, так как метод __enter__() файлового объекта возвращает self

Замки и условные переменные модуля 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