Последняя итерация Python в цикле For

Есть ли простой способ найти последнюю итерацию цикла for в Python? Я просто хочу преобразовать список в CSV. сбор во время исполнения

Кроме того, Курт Николс демонстрирует ту же точку в этом примере

public class Program
    {
        static void Main(string[] args)
        {
            new TestClass().InstanceMethod();

            Console.WriteLine("End program.");
            Console.ReadLine();
        }
    }

    public sealed class TestClass
    {
        private FileStream stream;

        public TestClass()
        {
            Console.WriteLine("Ctor");

            stream = new FileStream(Path.GetTempFileName(), FileMode.Open);
        }

        ~TestClass()
        {
            Console.WriteLine("Finializer");

            stream.Dispose();
        }

        public void InstanceMethod()
        {
            Console.WriteLine("InstanceMethod");

            StaticMethod(stream);
        }

        private static void StaticMethod(FileStream fs)
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();

            Console.WriteLine("StaticMethod"); 
            var len = fs.Length;
        }
    }

Результат такой, как ожидалось -

Ctor
InstanceMethod
Finalizer
StaticMethod

ObjectDisposedException is thrown

В этом примере я не могу понять, как сборщик мусора может собирать временный объект TestClass , поскольку на его член потока ссылался StaticMethod .

Да, Раймонд заявляет, что

GC не отслеживает корни, но об удалении предметов, которые не больше используется

Однако в этом примере объект TestClass все еще используется, не так ли?

Объясните, пожалуйста, насколько правильно GC собирает объект TestClass в этом кейс? Также, что более важно, как разработчики должны защититься от таких ситуаций?

9
задан Unmesh Kondolikar 8 March 2011 в 10:16
поделиться