Найти - Пользователи
Полная версия: вложенные with
Начало » Python для новичков » вложенные with
1
doza_and
как проще написать вложенные with - смущают бООльшые отступы

with open_db() as db:
with open_connection() as conn:
with open("a.dat") as file1:
with open("b.dat") as file2:
with getuserlock() as gu
do something
...............
...............
...............
...............
В c++ все понятно
{
dblinker linker;
dbconnector connector;
ifstream f1;f.exceptions(0xffff);f1.open("a.dat");
ifstream f2;f.exceptions(0xffff);f2.open("b.dat");
userlock lock;

do something
...............
...............
...............
...............
}
В учебнике по Жабе явно предлагают вложенные try-finally. :(

Может кто делал more pythonic style?
НУ может как-то так:
with li(open_db(),
open_connection(),
open("a.dat"),
open("b.dat"),
getuserlock()) as db,file1,file2,gu:
do something
...............
...............
...............
...............
Андрей Светлов
Если не можете использовать Python3 — делайте через contextlib.nested
o7412369815963
>>> A = type('A',(object,),{})
>>> with A() as a, A() as b:
... pass
Для 2,7
doza_and
спасибо
py.user.next
это, по ходу, баг

по идее, должно это работать:
with open_db() as db, \
open_connection() as conn, \
open("a.dat") as file1, \
open("b.dat") as file2, \
getuserlock() as gu:
do something
на bugs.python.org надо спросить

add
а, не, работает, это я забыл кавычки проверить все
with open('/etc/passwd') as f1, \
open('/etc/profile') as f2, \
open('/etc/bashrc') as f3:
for a, b, c in zip(f1, f2, f3):
print(a, b, c)
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