Python for循环 - 它究竟做了什么

时间:2017-03-08 19:12:14

标签: python python-2.7

我正在尝试学习python并遇到以下代码片段

f = open('test.txt')
for line in f:
    print line

它逐行打印我文件中的内容。

我理解循环的基本概念:for x in listlist是一个列表时,它将遍历列表中的所有元素。我的问题是,f是一个文件对象,而不是一个列表,for循环怎么会神奇地理解文件中的行并逐个处理它?

如果有人能够解释上述代码中for循环的确切结果,将会非常有帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

任何对象都可以通过实现必须返回迭代器的方法__iter__来提供迭代接口。迭代器是提供next方法(Python 3中的__next__)以返回迭代中的下一个元素的任何对象,以及返回迭代器本身的__iter__方法(以支持使用迭代器)在for循环中直接)。在这种情况下,文件对象定义__iter__以返回文件对象本身(因此文件对象是它们自己的迭代器),并定义next以返回文件中的下一行。

答案 1 :(得分:1)

文件对象支持迭代器协议。

当文件用作迭代器时,通常在for循环中,重复调用next()方法。

参考file.next()