我写了一个类来读取文本文件。文件由非空行块(我们称之为“部分”)组成,用空行隔开:
我的第一个实现是读取整个文件并返回一个列表的列表,也就是一系列的部分,每一部分又是由若干行组成的列表。但从内存的角度来看,这显然是很糟糕的。
因此,我将其重新实现为一个列表的生成器,也就是在每个周期中,我的类将整个部分作为一个列表读入内存,并将其生成。
这样做更好,但对于大型部分仍然存在问题。所以我想知道是否可以将其重新实现为一个生成器的生成器?问题是这个类非常通用,它应该能够满足以下两种用例:
1. 读取一个非常大的文件,其中包含非常大的部分,并且只循环一次。生成器的生成器非常适合这种情况。 2. 将一个小文件读入内存,以便多次循环。列表的生成器很好用,因为用户可以简单地调用 list(MyClass(file_handle))。
但是在第2种情况下,生成器的生成器不起作用,因为内部对象不会被转换为列表。
有没有比实现一个明确的 to_list() 方法更优雅的方法,让它将生成器的生成器转换为列表的列表?
line1.1
line1.2
line1.3
line2.1
line2.2
我的第一个实现是读取整个文件并返回一个列表的列表,也就是一系列的部分,每一部分又是由若干行组成的列表。但从内存的角度来看,这显然是很糟糕的。
因此,我将其重新实现为一个列表的生成器,也就是在每个周期中,我的类将整个部分作为一个列表读入内存,并将其生成。
这样做更好,但对于大型部分仍然存在问题。所以我想知道是否可以将其重新实现为一个生成器的生成器?问题是这个类非常通用,它应该能够满足以下两种用例:
1. 读取一个非常大的文件,其中包含非常大的部分,并且只循环一次。生成器的生成器非常适合这种情况。 2. 将一个小文件读入内存,以便多次循环。列表的生成器很好用,因为用户可以简单地调用 list(MyClass(file_handle))。
但是在第2种情况下,生成器的生成器不起作用,因为内部对象不会被转换为列表。
有没有比实现一个明确的 to_list() 方法更优雅的方法,让它将生成器的生成器转换为列表的列表?
[list(section()) for section in MyClass(file_handle)]
怎么样? - tobias_k