Я знаю, что оператор with
поддерживает несколько менеджеров контекста на одном уровне, например:
with open('foo.txt') as foo, open('bar.txt') as bar:
do_something()
Но что, если список менеджеров контекста становится слишком длинным для одной строки?Например:
with open('foo.txt') as foo, open('bar.txt') as bar, open('bla.txt') as bla, open('yada.txt') as yada:
do_something()
В настоящее время это недопустимый синтаксис в Python 3.7:
with (
open('foo.txt') as foo,
open('bar.txt') as bar,
open('bla.txt') as bla,
open('yada.txt') as yada, # same thing without the last trailing comma
):
do_something()
with
open('foo.txt') as foo,
open('bar.txt') as bar,
open('bla.txt') as bla,
open('yada.txt') as yada, # same thing without the last trailing comma
:
do_something()
Я мог бы сделать:
foo = open('foo.txt')
bar = open('bar.txt')
bla = open('bla.txt')
yada = open('yada.txt')
with foo, bar, bla, yada:
do_something()
Но даже ЭТО моглорасти слишком долго, пока я добавляю больше менеджеров контекста.
Я мог бы также сделать:
with open('foo.txt') as foo:
with open('bar.txt' as bar:
with open('bla.txt' as bla:
with open('yada.txt') as yada:
do_something()
Но это уродливо.В нем также отсутствуют смысловые намеки для читателя.Есть причина, по которой мы бы хотели разместить несколько менеджеров контекста на одном уровне.
Я знаю, что много менеджеров контекста очень редко принадлежат к одному и тому же уровню, ноэто определенно возможно.