Найти - Пользователи
Полная версия: with с несколькими обьектами
Начало » Python для новичков » with с несколькими обьектами
1
asilyator
Можно сделать поэлегантнее, чем это? Flat is better, than nested.
with obj1 as o1:
    with obj2 as o3:
        with obj3 as o3:
            код
fata1ex
Можно.

with open('in', 'r') as fin, open('out', 'w') as fout:
...

Ну и как обычно - google: ‘with multiple python’ первые же ссылки дают моментальный ответ.
asilyator
Changed in version 2.7: Support for multiple context expressions.
Я же помнил, что что-то не так.
Стоит ее юзать? Можно считать, что тот, кто сидит не на последней версии ветки питона - ССЗБ?
fata1ex
Нет, так считать нельзя. Лучше использовать contextlib.nested.
asilyator
http://docs.python.org/library/contextlib.html
That means, for example, that using nested() to open two files is a programming error as the first file will not be closed promptly if an exception is thrown when opening the second file.
fata1ex
Ну а что поделать :) Всегда приходится делать выбор между свежими версиями ПО, которое установлено не на всех системах, и устаревающими, которые сверкают ликами. Можно при большом желании реализовать свой nested, немного переписав исходный под себя.
Андрей Светлов

Убедительно прошу: не используйте contextlib.nested — ибо глюкав в некоторых местах. Правильный способ — contextlib2.ExitStack из http://contextlib2.readthedocs.org/en/latest/

asilyator
Это дополнительный модуль ради одной строчки тянуть? Тогда уж действительно лучше вложенные with плодить.

А в чем глюки?
Андрей Светлов

http://code.activestate.com/lists/python-ideas/14609/ — Nick в очередной раз разъясняет проблему.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB