TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #286 · 27 сеп.

В одном из прошлых постов был вопрос в комментариях по поводу закрытия файла. Тогда я бегло пояснил что Python сам собирает мусор в памяти. Давайте пройдемся по этому вопросу более внимательно. Когда вы открываете файл не сохраняя его в переменную, на самом деле файл остаётся открытым. Ссылка на него теряется где-то в памяти пока сборщик мусора не доберется до него. Давайте сделаем несколько экспериментов. Откроем файл не сохраняя его в переменную и поищем этот объект в памяти. Для поиска будем использовать вот такую функцию def check_file(): import io, gc for obj in gc.get_objects(): if isinstance(obj, io.TextIOWrapper) and \ obj.name == 'testfile': print('File', obj.name, 'is closed:', obj.closed) return print('Not found') Тест первый: файл, открытый в функции def func(): open('testfile', 'w') Вызываем функцию и проверяем наличие файла >>> func() >>> check_file() Not found Здесь всё предсказуемо. Все локальные переменные функции удаляются когда функция завершится. А при удалении файл закрывается. Тест второй: теперь откроем файл просто в коде, можно в интерактивной консоли. open('testfile', 'w') И снова он не сохранён в переменную, а значит будет удалён сборщиком мусора. Проверим: >>> check_file() File testfile is closed: False Бывалые сразу же скажут, что файл улетел в переменную "_", и будут правы! >>> print(_) <_io.TextIOWrapper name='testfile' mode='w' encoding='UTF-8'> Давайте обнулим её, можно просто распечатать любое число в консоли >>> 123 >>> print(_) 123 Проверим >>> check_file() Not found ➡️ Отсюда вывод: Всегда явно закрывайте файлы! Не рассчитывайте что кто-то (gc) сделает это за вас. _________________ Мои примеры порой содержат оптимизации в угоду краткости но в ущерб правильности. #tricks

Hashtags

Резултати

Пронајдени 1 слични објави

Глобално пребарување

sudo recast

@sudo_recast · Post #918 · 17.04.2025 г., 09:47

A useful command when you encounter conflicts while cherry-picking: tig HEAD $(git rev-parse CHERRY_PICK_HEAD 2>/dev/null) -- $(git diff --name-only --diff-filter=U | head -1) #tricks@sudo_recast

Hashtags