как мне узнать, за какой функцией должна следовать операция закрытия ресурса

#python

#python

Вопрос:

Я новичок в Python и не понимаю, когда мне следует вызывать close.

Например, рассмотрим этот пример из документации csv.

 import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row
  

В конце этой задачи нет reader.close() .

Q> Как мне узнать, должен ли за вызовом функции следовать вызов закрытия?

Ответ №1:

Функции, возвращающие ресурсы, которые необходимо очистить, будут иметь документацию, объясняющую это. csv.reader не открывает файл или иным образом не создает закрываемый ресурс. open Вызов выполняется, но with оператор заботится о его закрытии для вас.

Ответ №2:

Единственный раз, когда вам нужно вызвать close, — это когда вы должны освободить системные ресурсы. По большому счету это верно только для дескрипторов файлов. Общие объекты, такие как средство чтения csv, не обязательно закрывать.

Ответ №3:

Приведенный вами пример не требует закрытия, потому что открытый файл был обработан with (аналогично using C #).

Теперь, если бы ваш пример был таким, было бы close() :

 import csv
f = open('some.csv', 'rb')
reader = csv.reader(f)
for row in reader:
    print row
f.close()
  

По сути, это одно и то же, но with он устраняет сбои во время выполнения, чтобы убедиться, что дескриптор файла ( f ) закрыт. Если бы между open и здесь была проблема close , у вас все равно был бы открытый файловый ресурс.

РЕДАКТИРОВАТЬ: with это то же самое, что и это:

 import csv
f = open('some.csv', 'rb')
try:
    reader = csv.reader(f)
    for row in reader:
        print row
finally:
    f.close()