Элементы языка Python
Материал из Xgu.ru
Содержание |
[править] Вопросы и ответы
[править] Зачем нужен with?
with это хитрая вещь, которая позволяет значительно сократить конструкции такого вида
con1 = users_db(uid)
con2 = users_db(uid)
con1.startTransaction()
con2.startTransaction()
try:
con1.delete('foo', id=1)
con2.delete('bas', id=1)
except:
con1.rollback()
con2.rollback()
raise
else:
con1.commit()
con2.commit()
до такого:
con1 = users_db(uid)
con2 = users_db(uid)
with transaction(con1, con2):
con1.delete('timelines', id=1)
con2.delete('timelines', id=1)
То есть, основной её смысл в том, что мы можем не беспокоиться о том, что нам нужно закрыть транзакцию, или откатить её, в случае, если что-нибудь пошло не так.
Эта задача возлагается на плечи функции (или класса), который передаётся в качестве аргумента with.
With автоматически позаботится о том, чтобы выполнить закрывающую часть функции, даже если with покинули из-за исключения или как-то иначе:
@contextmanager
def for_with():
try:
print 1
yield
finally:
print 3
def func():
with for_with():
print 2
return False
Подробнее:
- PEP 343, the "with" statement (англ.)
- What is the python “with” statement designed for? (англ.)
- Understanding Python's "with" statement (англ.)
- Python's with statement (англ.)
- (Launchpad-dev) The with statement (англ.)
Ещё надо разобраться с понятием contextmanager, поскольку оно имеет к with самое непосредственное отношение:
[править] Обработка исключений
- Python Exception Handling Techniques (англ.) --- обработка исключений в Python
[править] Дополнительная информация
[править] Примечания
| Информация о Python на xgu.ru | ||
|---|---|---|
| Реализации | Cython • Psyco • PyPy | |
| Веб-фреймворки | Django • Flask • Zope | |
| IDE | Pydev • NetBeans | |
| Курсы | Python для сетевых инженеров | |
| Другое | aalib • ctypes • gevent • mpmath • pjsua • Pandas • pyparsing • virtualenv • GMPY • IPython • Jinja2 • Python и Vim • Работа с модулями в Python • SWIG • Scapy • SciPy • Работа с датой и временем в Python • Python как shell • Web и Python • Алгоритмы, сложные структуры данных и дискретная математика в Python • Анализ кода Python • Интеграция Python с другими языками • Объекты и классы в Python • Оформление кода Python • Параллелизм и конкурентное исполнение в Python • Профайлинг в Python • Работа с базами данных в Python • Работа с операционной системой в Python • Работа с сетью в Python • Работа с текстами в Python • Работа с файлами в Python • Сравнение Python с другими языками • Тестирование в Python • Типы в Python • Элементы функционального программирования в Python • Элементы языка Python | |