Начинающий кодировщик Python здесь имеет опыт работы с Java. Я до сих пор озадачен этим:
with open(...) as f:
do_something(f)
даже после поиска в Google и прочтения некоторых ответов здесь (я просто не мог понять их).
Насколько я понимаю, существует такая вещь, как диспетчер контекста, который представляет собой своего рода оболочку, содержащую ссылку на создаваемый файл. Касательно
as f:
«как» выше похоже на «как» ниже
import numpy as np
Это просто псевдоним. «f» относится не к файлу, а к диспетчеру контекста. Менеджер контекста, используя шаблон декоратора, реализует все методы, которые делает открытый файл, так что я могу обращаться с ним как с файловым объектом (и получить доступ к файловому объекту, вызвав соответствующие методы, которые будут вызываться для файла). внутри контекстного менеджера). И, конечно же, файл закрывается, когда блок завершается (в этом весь смысл).
Возникает вопрос: возвращает ли вообще open() файл (или ссылку на файл) или менеджер контекста? Возвращает ли он менеджеры контекста в целом, и это то, что мы использовали все время, не зная об этом? Или он возвращает типы файлов, за исключением этого специального контекста, когда возвращает что-то другое, например менеджер контекста.
Это где-то рядом правильно? Кто-нибудь хочет уточнить?
with
после открытия просто безопасно закрывает файл после записи. - person n1c9   schedule 15.08.2016