четверг, 6 августа 2009 г.

Оператор with в Python

Оператор 'with' используется для обвертки блока выполнения методами, определёнными менеджером контекста. Оператор позволяет скрыть общие try...except...finally паттерны для удобного переиспользования.

Интерфейс менеджера контекста в стандартной библиотеке python 2.5 уже реализуют:
- file
- thread.LockType
- threading.Lock
- threading.RLock
- threading.Condition
- threading.Semaphore
- threading.BoundedSemaphore

Список будет расширяться.

Пример использования оператора 'with':


#!/bin/env python
#-*- coding: utf-8 -*-

import threading

class Worker(object):
def __init__(self):
self.lock = threading.RLock()

def execute(self):
with self.lock:
print "thread safe work there"

if __name__ == '__main__':
worker = Worker()
# execute worker.execte() from many threads
# ...
worker.execute()


Примечания:
1. оператор 'with' появился c python 2.5
2. для использования 'with' в python 2.5 необходимо импортировать with_statement фичу из __future__ :

from __future__ import with_statement__
# using 'with'

С python 2.6 'with' работает из коробки :).

Дополнительная информация:
http://docs.python.org/reference/compound_stmts.html#with
http://www.python.org/dev/peps/pep-0343/
http://docs.python.org/reference/datamodel.html#context-managers

Комментариев нет:

Отправить комментарий