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 迭代器

迭代的工具。可以说成是重复,但是每一次的重复都基于上一次的结果。

  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: 
  1. 迭代器对象:拥有.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()

总结

  1. 可迭代对象:只要是有.iter()方法的对象就是可迭代对象。str/list/tuple/dict/set/file类型是可迭代对象
  2. 迭代器对象:拥有.next()方法的可迭代对象就是迭代器对象。file是迭代器对象。
posted @ 2025-08-24 17:02  bokebanla  阅读(6)  评论(0)    收藏  举报