7.3 迭代器
7.3 迭代器
#打印1-100
count=1
while True:
if count==101:
break
# print(count)
count+=1
#上一次循环和这一次关系不是很强
#python中的对象
height=180
salary=3.2
name='coco'
hobby_list=['run','ride','read']
hobby_tup=('run','ride','read')
info_dict={'name':'coco','height':185,'hobby_list':['run','ride','read']}
hobby_set={'run','ride','read'}
#函数对象
def func():
pass
#文件对象,'w'和'a'会自动生成文件
f=open(f'a.txt','r',encoding='utf-8')
7.3.1 迭代器
迭代的工具。可以说成是重复,但是每一次的重复都基于上一次的结果。
- 可迭代对象:只要是有.iter()方法的对象就是可迭代对象。
name.__iter__()
hobby_list.__iter__()
hobby_tup.__iter__()
info_dict.__iter__()
hobby_set.__iter__()
f.__iter__()
#字符型、列表、元组、字典、集合、文件都是可迭代对象
#整型、浮点型和函数类型是不可迭代对象
<_io.TextIOWrapper name='a.txt' mode='r' encoding='utf-8'>
hobby_list=['run','ride','read']
hobby_list_iter=hobby_list.__iter__() #把列表变成可迭代对象
print(hobby_list_iter.__next__())
print(hobby_list_iter.__next__())
print(hobby_list_iter.__next__())
print(hobby_list_iter.__next__())
# __next__是在遍历可迭代对象的元素,一旦遍历完就报错
run
ride
read
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
Cell In[14], line 7
5 print(hobby_list_iter.__next__())
6 print(hobby_list_iter.__next__())
----> 7 print(hobby_list_iter.__next__())
StopIteration:
- 迭代器对象:拥有.next()方法的可迭代对象就是迭代器对象。文件是迭代器对象。
hobby_list=['run','ride','read']
#用while遍历
count=0
while True:
print(hobby_list[count])
count+=1
if count==len(hobby_list):
break
run
ride
read
hobby_list=['run','ride','read']
hobby_list_iter=hobby_list.__iter__()
while True:
try:
print(hobby_list_iter.__next__())
except Exception as e:
break
#上一段代码如果用C写,就是for循环原理
for i in hobby_list: #把hobby_list转化成可迭代对象
#相当于
#for i in hobby_list.__iter__():
print(i)
#相当于
# i=hobby_list_iter.__next__()
# print(i)
print(hobby_list) #相当于鸡蛋
print(hobby_list.__iter__()) #相比较列表节省内存空间,#相当于老母鸡
run
ride
read
run
ride
read
['run', 'ride', 'read']
<list_iterator object at 0x000002D1DF3B3460>
hobby_list_iter=hobby_list.__iter__()
print(hobby_list_iter)
print(hobby_list_iter.__iter__().__iter__().__iter__().__iter__().__iter__())
#迭代器对象使用iter方法后是迭代对象本身
<list_iterator object at 0x000002D1DF3B01F0>
<list_iterator object at 0x000002D1DF3B01F0>
for i in f.__iter__(): #不会报错
print()
总结
- 可迭代对象:只要是有.iter()方法的对象就是可迭代对象。str/list/tuple/dict/set/file类型是可迭代对象
- 迭代器对象:拥有.next()方法的可迭代对象就是迭代器对象。file是迭代器对象。
浙公网安备 33010602011771号