python_d05

01 迭代器

'''
1、什么是迭代器
    迭代的工具

    什么是迭代?
    迭代是一个重复的过程,每一次重复都是给予上一次结果而进行的

    单纯的重复并不是迭代
    while True:
        print('=====>')

2、为什么要用迭代器
    找到一种可以不依赖索引的迭代取值方式

3、怎么用迭代器
    可迭代对象?
        在Python中,但凡内置有__iter__方法对象,都是可迭代的对象

    迭代器对象?
        执行可迭代对象下__iter__方法得到的返回值就是一个迭代器对象

        迭代器对象内置
            __next__方法
            __iter__方法,执行该方法得到仍然是迭代器本身,干什么用??

    迭代器对象一定是可迭代的对象
    可迭代的对象不一定是迭代器对象
'''

# l=['a','b','c']
# l='hello'
# l=('a','b','c','d','e')
# l={'a':1,'b':2,'c':3}  #报错,字典是无序
# i=0
# while i < len(l):
#     print(l[i])
#     i+=1

# a=1
# b=1.1
# #以下都是可迭代的对象
# c='hello'
# d=[1,2,3]
# e=(1,2,3)
# d={'a':1}
# g={1,2,3}
# f=open('aa.py','rb')

# 执行可迭代对象的__iter__方法得到迭代器对象
# dic={'k1':1,'k2':2,'k3':3}
# iter_obj=dic.__iter__()
#
# # print(iter_obj)
#
# print(iter_obj.__next__())
# print(iter_obj.__next__())
# print(iter_obj.__next__())
# print(iter_obj.__next__())   #报错,因为没有第四个字典的key


# f=open('aa.py','rt',encoding='utf-8')
# iter_obj=f.__iter__()
#
# print(iter_obj)
# print(iter_obj.__next__(),end='')
# print(iter_obj.__next__(),end='')
# print(iter_obj.__next__(),end='')

# 基于迭代器的迭代取值方式
dic={'k1':1,'k2':2,'k3':3}
#
# iter_obj=dic.__iter__()
# print(iter_obj)    #<dict_keyiterator object at 0x0000000001D94778>
#
# print(iter_obj.__iter__().__iter__().__iter__().__iter__() is iter_obj)  #iter_obj.__iter__就是他本身
#
# while True:
#     try:
#         print(iter_obj.__next__())
#     except StopIteration:
#         break


# for循环的底层运行机制:for循环可以称之为迭代器循环
# 1、新调用in后那个对象的__iter__方法,得到该对象的迭代器对象
# 2、执行迭代器对象的__next__方法,将得到的返回值赋值in前面的变量名,然后执行一次循环体代码
# 3、循环往复,直到取干净迭代器内所有的值,自动捕捉异常结束循环

# for k in dic:   #iter_obj=dic.__iter__()
#     print(k)

# for x in 10:  #报错,10不是可迭代的
#     pass

# f=open('aa.py','rt',encoding='utf-8')
# for line in f:
#     print(line)

# 示范一
# dic={'k1':1,'k2':2,'k3':3}
# iter_obj=dic.__iter__()
#
# print('第一次迭代iter_obj')
# for k in iter_obj:
#     print(k)
#
# print('第二次迭代iter_obj')
# for k in iter_obj:
#     print(k)

'''
第一次迭代iter_obj
k1
k2
k3
第二次迭代iter_obj
'''

# 示范二
# dic={'k1':1,'k2':2,'k3':3}
# iter_obj=dic.__iter__()
# print('第一次迭代iter_obj')
# for k in iter_obj:
#     print(k)
#
# iter_obj=dic.__iter__()
# print('第二次迭代iter_obj')
# for k in iter_obj:
#     print(k)

'''
第一次迭代iter_obj
k1
k2
k3
第二次迭代iter_obj
k1
k2
k3
'''

# 示范三:1
# dic={'k1':1,'k2':2,'k3':3}
# #每次都会主动先调用in后那个对象的__iter__方法,得到该对象的迭代器对象
# print('第一次迭代')
# for k in dic:
#     print(k)
#
# print('第二次迭代'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值