Уведомления

Группа в Telegram: @pythonsu

#1 Май 18, 2012 15:18:51

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

with с несколькими обьектами

Можно сделать поэлегантнее, чем это? Flat is better, than nested.

with obj1 as o1:
    with obj2 as o3:
        with obj3 as o3:
            код



Офлайн

#2 Май 18, 2012 17:49:50

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

with с несколькими обьектами

Можно.

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

Ну и как обычно - google: ‘with multiple python’ первые же ссылки дают моментальный ответ.



Отредактировано fata1ex (Май 18, 2012 17:52:10)

Офлайн

#3 Май 18, 2012 19:39:42

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

with с несколькими обьектами

Changed in version 2.7: Support for multiple context expressions.
Я же помнил, что что-то не так.
Стоит ее юзать? Можно считать, что тот, кто сидит не на последней версии ветки питона - ССЗБ?



Офлайн

#4 Май 18, 2012 21:38:21

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

with с несколькими обьектами

Нет, так считать нельзя. Лучше использовать contextlib.nested.



Офлайн

#5 Май 19, 2012 00:28:53

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

with с несколькими обьектами

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.



Офлайн

#6 Май 19, 2012 00:52:14

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

with с несколькими обьектами

Ну а что поделать :) Всегда приходится делать выбор между свежими версиями ПО, которое установлено не на всех системах, и устаревающими, которые сверкают ликами. Можно при большом желании реализовать свой nested, немного переписав исходный под себя.



Офлайн

#7 Май 19, 2012 12:05:21

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

with с несколькими обьектами

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



Офлайн

#8 Май 19, 2012 12:29:39

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

with с несколькими обьектами

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

А в чем глюки?



Офлайн

#9 Май 19, 2012 14:10:51

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

with с несколькими обьектами

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version