1.1 python文件迭代器
python文件迭代器有next方法和iter方法,所以是迭代器和可迭代对象。
示例
>>> path=r'E:\documents\F盘\iterator.py'
>>> f=open(path)
>>> '__iter__' in dir(f)
True
>>> '__next__' in dir(f)
True
1.1.1 python文件对象的readline与next
python文件对象readline()方法,每调用一次返回1行文本,到达文件末尾,返回空字符串。
python文件对象next()方法,每调用一次返回1行文本,到达文件末尾,触发StopIteration异常。
示例
>>> path=r'E:\documents\F盘\iterator.py'
# readline()文件末尾 返回空字符串
>>> f=open(path,encoding='utf-8')
>>> f.readline()
"S='梯阅线条'\n"
>>> f.readline()
'print(S)\n'
>>> f.readline()
'L=list(S)\n'
>>> f.readline()
'print(L)'
>>> f.readline()
''
>>> f.readline()
''
>>> f.close()
# __next__()文件末尾触发 StopIteration
>>> f=open(path,encoding='utf-8')
>>> f.__next__()
"S='梯阅线条'\n"
>>> f.__next__()
'print(S)\n'
>>> f.__next__()
'L=list(S)\n'
>>> f.__next__()
'print(L)'
>>> f.__next__()
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
f.__next__()
StopIteration
>>> f.close()
1.1.2 python文本读取
python文本读取可用for自动调用next,或者readlines()读取到列表后遍历。
next每次读一行,readlines一次读取全部,推荐使用for循环调用文件对象的next。
示例
>>> path=r'E:\documents\F盘\iterator.py'
# for 循环每次调用文件对象的 __next__()方法,每次读1行
>>> for line in open(path,encoding='utf-8'):
print(line,end='')
S='梯阅线条'
print(S)
L=list(S)
print(L)
# readlines()一次读取全部文件内容放到列表
>>> open(path,encoding='utf-8').readlines()
["S='梯阅线条'\n", 'print(S)\n', 'L=list(S)\n', 'print(L)']
>>> for line in open(path,encoding='utf-8').readlines():
print(line,end='')
S='梯阅线条'
print(S)
L=list(S)
print(L)
1.2 python调用iter和next
1.2.1 iter和next
python的next(X)内置函数,会自动调用X对象的next()方法,X是迭代器对象。
有next()方法的对象是迭代器对象。迭代工具会一直调用迭代对象的next()方法。
python的iter(Y)内置函数,会自动调用Y对象的iter()方法,Y是可迭代对象。
iter()内置函数调用可迭代对象的iter()方法,返回迭代器对象。
可迭代对象通过iter()函数转为迭代器对象。
for循环将可迭代对象传给iter()内置函数,获得具有next()方法的迭代器对象,然后调用迭代对象的next()方法。
示例
>>> path=r'E:\documents\F盘\iterator.py'
# 文件对象f本身是迭代器对象,具有next方法,不需iter()函数进行转换
# next(f) 相当于 F.__next__()
>>> f=open(path,encoding='utf-8')
>>> f.__next__()
"S='梯阅线条'\n"
>>> f.__next__()
'print(S)\n'
>>> next(f)
'L=list(S)\n'
>>> next(f)
'print(L)'
>>> L=list('tyxt')
>>> '__iter__' in dir(L)
True
>>> '__next__' in dir(L)
False
>>> IT=iter(L)
>>> type(IT)
<class 'list_iterator'>
>>> next(IT)
't'
>>> IT.__next__()
'y'
# iter(L)相当于 L.__iter__()
>>> type(iter(L)),type(L.__iter__())
(<class 'list_iterator'>, <class 'list_iterator'>)
版权声明©:
本文首发微信公众号:梯阅线条,
原创不易,转载请注明出处。
更多内容参考python知识分享或软件测试开发目录。