В вашем примере файл не гарантированно будет закрыт перед выходом интерпретатора. В текущих версиях CPYTHON файл будет закрыт в конце цикла, потому что CPYTHON использует справочный подсчет в качестве основного механизма сбора мусора, но это деталь реализации, а не особенность языка. Другие реализации Python не гарантированно работают таким образом. Например, Ironpython, Pypy и Jython не используют ссылочный подсчет и, следовательно, не закроют файл в конце цикла.
Плохая практика - полагаться на реализацию сбора мусора CPYTHON, потому что он делает ваш код менее портативным. У вас может не быть утечки ресурсов, если вы используете CPYTHON, но если вы когда -нибудь переключитесь на реализацию Python, которая не использует подсчет ссылок, вам нужно пройти весь код, и убедиться, что все ваши файлы закрыты должным образом.
input()
Это делает так, чтобы программа отключалась после нажатия клавиши, а не сразу