这是一个关于";发电机";。让我们看看由内置函数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__
方法。你可以在这里找到它的源代码,它将有助于解决问题。