s0rg
Или циклические ссылки и gc у питона это два разных механизма?
cutwaterСпасибо.
GC отлавливает циклические ссылки. В простых случаях работает подсчет ссылок.
4kptПо моему вы что-то путаете, with ничего не читает, он просто вызывает методы __enter__ и __exit__ (при выходе из блока) файлового объекта, которые открывают и закрывают файл, и возвращает ссылку на файловый объект.
P.S. Насчет with - я ей не пользуюсь. Я всегда слежу за открытием и закрытием файла. При наступлении любой ошибки осуществляю попытку закрыть файл инструкцией try: file.close(), except: pass.
Поясню почему: Считывание информации функцией with может привести к ошибкам в коде. Нет явного открытия и закрытия файла. Если файл открыт и изменяется, то with может считывать из него информацию: я против этого, так как ценность такой информации сомнительна…
with open('file.txt') as f: data = f.read() print data # do something
f = pen('file.txt') try: data = f.read() finally: f.close() print data # do something
>>> open('c:/111.txt') <open file 'c:/111.txt', mode 'r' at 0x012C5230> >>> print _ <open file 'c:/111.txt', mode 'r' at 0x012C5230>
sp3Я только вчера про IPython узнал, так вот там открытые файловые объекты хз где хранятся, т.к. переопределение “_” не приводит к удалению объекта, более того, при вызове
вот она, магия:
open('filename')
Это не магия, а фитча питонячей консоли.
IPython, это глючное поделие, которое постоянно делает что-то не то. Особенно доставляет не санкционированный с пользователем вызов дескрипторов... Используйте лучше bpython, так как он няшен.