内置的open()是否返回生成器



这是一个关于";发电机";。让我们看看由内置函数open()返回的文件对象。

1.内置open()功能,官方文档

在官方的python文档中,open()函数被称为返回一个";文件对象";文件对象的文档并没有真正说明这是什么样的生物,除了它有read()write()方法以及

文件对象也称为类文件对象或流。

🤷‍♂️ <嗯,这很有帮助,对吧>

2.来自互联网的文字

以下是open()返回的文件对象被称为生成器的一些示例。

2.1如何在Python中使用生成器和收益(Realpython.com(

(强调矿(

open((返回一个生成器对象,您可以通过逐行延迟迭代该对象

2.2.Python中读取大文件的懒惰方法

(得分超过400+的已接受答案,重点是我的(

如果文件是基于行的,则文件对象已经是行的惰性生成器

for line in open('really_big_file.dat'):
process_data(line)

2.3。Python中的生成器——5件事要知道(medium.com(

(强调矿(

使用open()方法打开EEG文件将创建一个文件对象,它的功能是生成一行数据的生成器字符串。

人们可能很容易在互联网上找到更多这样的例子。。

3.测试open()返回的文件对象是否为生成器

遵循如何检查对象是否是python中的生成器对象?我们可以对文件对象进行一些测试:

In [7]: o = open(r'C:tmptest.csv')
In [8]: type(o)
Out[8]: _io.TextIOWrapper
In [9]: import inspect
In [10]: inspect.isgenerator(o)
Out[10]: False
In [12]: inspect.isgeneratorfunction(o)
Out[12]: False
In [13]: import types
In [14]: isinstance(o, types.GeneratorType)
Out[14]: False

所有这些测试都失败了,这表明open()返回的文件对象不是生成器。尽管如此,许多人还是倾向于称之为发电机。

4.是否包括发电机

那么,蟒蛇同胞们,open()函数返回生成器的说法正确吗?下面的

for line in open('file.csv'):
do_something(line)

涉及发电机的使用?

pythonopen函数返回一个不是生成器的TextIOWrapper对象。

不过,您之所以可以遍历对象,是因为它定义了__next__方法。你可以在这里找到它的源代码,它将有助于解决问题。

最新更新