Форум сайта python.su
63
А я и не надеюсь ни на какие сборщики. Я всегда стараюсь закрывать открытый файл явно или через инструкцию try-except.
Отредактировано 4kpt (Ноя. 10, 2012 00:33:44)
Офлайн
19
s0rg
Или циклические ссылки и gc у питона это два разных механизма?
Отредактировано cutwater (Ноя. 10, 2012 00:35:53)
Офлайн
25
cutwaterСпасибо.
GC отлавливает циклические ссылки. В простых случаях работает подсчет ссылок.
Офлайн
63
cutwater,
Если можно поясни.
Какой механизм обнаружения циклических ссылок, если не секрет???
Т.е. в какой момент питон понимает, что ссылка зациклилась. Может ссылка на объект не уменьшается???
Офлайн
19
Офлайн
63
Спасибо, почитаю.
До этих теледебатов думал, что сборщик - это и есть обработчик “ссылок на объект”. Если с объектом все в порядке и ссылки не циклятся - он работает в одном режиме, если нет - начинает работать в другом…. Спасибо за более детальные пояснения.
Отредактировано 4kpt (Ноя. 10, 2012 00:48:06)
Офлайн
173
Хочется еще добавить про with.
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
Офлайн
18
вот она, магия:
>>> open('c:/111.txt') <open file 'c:/111.txt', mode 'r' at 0x012C5230> >>> print _ <open file 'c:/111.txt', mode 'r' at 0x012C5230>
Офлайн
18
sp3Я только вчера про IPython узнал, так вот там открытые файловые объекты хз где хранятся, т.к. переопределение “_” не приводит к удалению объекта, более того, при вызове
вот она, магия:
open('filename')
Отредактировано adray (Ноя. 10, 2012 12:58:48)
Офлайн
26
Это не магия, а фитча питонячей консоли.
IPython, это глючное поделие, которое постоянно делает что-то не то. Особенно доставляет не санкционированный с пользователем вызов дескрипторов... Используйте лучше bpython, так как он няшен.
Офлайн