6

Несколько переменных в операторе 'with'?

9

Вопрос: Можно ли объявить несколько переменных с помощью оператора with в Python?

Я пытаюсь использовать оператор with в Python для открытия нескольких файлов одновременно. Что-то вроде следующего кода:

from __future__ import with_statement

with open("out.txt", "wt"), open("in.txt") as file_out, file_in:
    for line in file_in:
        file_out.write(line)

Однако у меня возникает вопрос: возможно ли объявить несколько переменных с помощью этого оператора так, как я это сделал выше? Или проблема заключается в том, что очистка нескольких ресурсов одновременно не поддерживается?

Буду признателен за любую помощь или информацию по этому вопросу!

2 ответ(ов)

0

Я думаю, вам нужно сделать это вместо этого:

from __future__ import with_statement

with open("out.txt", "wt") as file_out:
    with open("in.txt") as file_in:
        for line in file_in:
            file_out.write(line)

Этот код открывает файл in.txt для чтения и файл out.txt для записи, и копирует содержимое одного файла в другой с помощью конструкции with, которая автоматически управляет контекстом и закрывает файлы после завершения работы.

0

В Python 3.1 и выше вы можете указывать несколько контекстных выражений в конструкции with, и они будут обрабатываться так, как будто несколько операторов with вложены друг в друга:

with A() as a, B() as b:
    suite

эквивалентно следующему:

with A() as a:
    with B() as b:
        suite

Это также означает, что вы можете использовать переменную, определённую в первом выражении, во втором (что полезно при работе с соединениями с базой данных и курсорами):

with get_conn() as conn, conn.cursor() as cursor:
    cursor.execute(sql)

Таким образом, вы можете эффективно управлять ресурсами, избегая избыточного кода и обеспечивая более читаемое оформление.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь