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语句会自动为您执行此操作,创建一个临时的未命名变量以在循环期间保存迭代器。另请参阅迭代器,序列和生成器。
答案 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
对象,从而产生流中的行。