Size: a a a

Сообщество Python Программистов

2020 March 12

VA

Vadim Apenko in Сообщество Python Программистов
Бензофуран Гетероцикл
Контекстный менеджер внутри контекстного менеджера внутри контекстного менеджера
Именно. В питоне возможно делать много контекстных менеджеров внутри одного блока with
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
with ... as ..., ... as ...:
И так сколько надо
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Правда строка может случайно выйти длиной в километр
источник
2020 March 13

VA

Vadim Apenko in Сообщество Python Программистов
Бензофуран Гетероцикл
with ... as ..., ... as ...:
И так сколько надо
Всё можно сделать красиво)
источник

l

let45fc in Сообщество Python Программистов
Бензофуран Гетероцикл
with ... as ..., ... as ...:
И так сколько надо
Не видел такого. А ну, дайте пример как это может работать
источник

VA

Vadim Apenko in Сообщество Python Программистов
let45fc
Не видел такого. А ну, дайте пример как это может работать
with open("file1") as f1, open("file2") as f2, open("file3") as f3:
   ....


Тут надо понимать, открывается контекст по порядку слева направо
Закрывается в обратном порядке, справа налево
источник

VA

Vadim Apenko in Сообщество Python Программистов
Можно юзать даже так
with A() as a, B(a) as b, C(a, b) as c:
   doSomething(a, c)
источник

l

let45fc in Сообщество Python Программистов
Vadim Apenko
with open("file1") as f1, open("file2") as f2, open("file3") as f3:
   ....


Тут надо понимать, открывается контекст по порядку слева направо
Закрывается в обратном порядке, справа налево
А, все, я чет подумал там несколько as подряд идут, без вызова контекстного менеджера перед каждым. Хотя про такие возможности with я тоже не знал)
источник

VA

Vadim Apenko in Сообщество Python Программистов
with A() as a, \
    B() as b, \
    C() as c:
   doSomething(a,b,c)
источник

l

let45fc in Сообщество Python Программистов
Кстати я как-то редко юзаю контекстные менеджеры, разве что работа с файлами, возможно какие-то подключения, но не более
источник

VA

Vadim Apenko in Сообщество Python Программистов
Вообще советую чекнуть contextlib
там много интересного
источник

l

let45fc in Сообщество Python Программистов
Vadim Apenko
with A() as a, \
    B() as b, \
    C() as c:
   doSomething(a,b,c)
Красивенько)
источник

VA

Vadim Apenko in Сообщество Python Программистов
например
with ExitStack() as stack:
   files = [stack.enter_context(open(fname)) for fname in filenames]
источник

l

let45fc in Сообщество Python Программистов
Кстати linter че-то ругается на \
источник

З

Захар in Сообщество Python Программистов
Vadim Apenko
with A() as a, \
    B() as b, \
    C() as c:
   doSomething(a,b,c)
Похоже на извращение
источник

VA

Vadim Apenko in Сообщество Python Программистов
Для разовых операций с sql можно так
with get_conn() as conn, conn.cursor() as cursor:
   cursor.execute(sql)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Vadim Apenko
Для разовых операций с sql можно так
with get_conn() as conn, conn.cursor() as cursor:
   cursor.execute(sql)
а вот это интересненько
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Vadim Apenko
например
with ExitStack() as stack:
   files = [stack.enter_context(open(fname)) for fname in filenames]
что это делает?
источник

l

let45fc in Сообщество Python Программистов
Vadim Apenko
Для разовых операций с sql можно так
with get_conn() as conn, conn.cursor() as cursor:
   cursor.execute(sql)
Да, вот такие штуки тоже использую
источник

l

let45fc in Сообщество Python Программистов
В списке будут открытые файлы, после выхода из блока with файлы тоже закроются
источник