[英]Python generator and file object
我有关于生成器和文件对象的问题。
如果我写代码
def iter(ls):
count=0
for k in ls:
if count==2:
break
count+=1
for k in ls:
yield k
test=[1,2,3,4]
k=iter(test)
for i in k:
print i
然后输出是
1 2 3 4
是的,我可以理解这一点,因为此代码中的break语句不会影响以下yield语句。
但是如果我对文件执行类似的操作,在这种情况下,我会创建一个“数据”文件并将其写入
1
2
3
4
如果我只改变线
test=[1,2,3,4] → test=open("data","r")
然后结果是
4
这意味着break语句以某种方式影响,因此for循环中的genetor“yield”与前一种情况不同。
造成这种差异的原因是什么?
是的,因为文件对象也存储了当前读取的位置。 因此,当您尝试再次迭代文件对象时(不执行.seek()
),它将从下一行(您离开的位置)开始。 那是在打开文件并迭代一次之后,如果你再次尝试迭代它(不做.seek()
),它就不会产生任何结果,因为在第一次迭代中光标位于文件的末尾而且没有别的东西可读。 示例 -
我的a.txt -
1
2
3
4
代码 -
>>> for i in f:
... print(i)
...
1
2
3
4
>>> for i in f:
... print(i)
...
>>>
-
如上所述,如果要将文件光标移动到文件的开头,则必须使用file.seek(0)
,0表示移动起始位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.