序列来自哪里?

时间:2014-05-19 14:52:30

标签: python

Python的 for 语句遍历任何序列列表字符串)的项目。< / p>

序列来自下面的代码?

file=open('filename.txt','r')
for line in file:
    print line

这与 __iter__() 方法有关吗?

只是一些引用:

https://docs.python.org/3/glossary.html#term-iterable

  

一个能够一次返回一个成员的对象。迭代的示例包括所有序列类型(例如list,str和tuple)和一些非序列类型,如dict,文件对象,以及使用__iter__()__getitem__()方法定义的任何类的对象。 Iterables可用于for循环以及需要序列的许多其他地方(zip()map(),...)。当可迭代对象作为参数传递给内置函数iter()时,它返回对象的迭代器。这个迭代器适用于一组值的一次传递。使用iterables时,通常不需要调用iter()或自己处理迭代器对象。 for语句会自动为您执行此操作,创建一个临时的未命名变量以在循环期间保存迭代器。另请参阅迭代器,序列和生成器。

1 个答案:

答案 0 :(得分:1)

Python的for statement遍历任何iterable object的项目,而不仅仅是序列:

  

for语句用于迭代序列的元素(例如字符串,元组或列表)或其他可迭代对象

Iterables是具有__iter__ method__getitem__ method的对象。

file个对象实现__iter__方法;它们也是iterator objects,因为它们有__next__ method(Python 3)或next method(Python 2),所以文件对象的所有__iter__方法都必须这样做是return self

对于Python 3,另请参阅io.IOBase documentation

  

IOBase(及其子类)支持迭代器协议,这意味着可以迭代IOBase对象,从而产生流中的行。