Pyhton入门之迭代器与生成器

#迭代器:
    #迭代器指的是迭代取值,迭代是一个重复过程,每次重复都是基于上一次的结果而继续的,单纯的重复不是迭代


#为何要有迭代器

#迭代器是用来迭代取值的工具,二涉及把多个值循环取出来的类有:列表、字符串、元祖、字典、集合、打开文件
# l=[1,2,3]
# i=0
# while i<len(l):
#     print(l[i])
#     i+=1


#如何用迭代器


#可迭代对象:但凡内置有__iter__方法的都是可迭代对象

#迭代器对象:内置有__next__方法并且内置有__iter__方法的对象
        #  迭代器对象.__next__():得到迭代器的下一个值
        #迭代器对象.__iter__ :得到迭代器的本身,说白了调了跟没调一样



# d={'a':1,'b':2}
#
# d_iterator=d.__iter__()


# print(d_iterator.__next__())
# print(d_iterator.__next__())
# print(d_iterator.__next__())  抛出异常,结束信号,StopIteration

# while True:
#     try:
#         print(d_iterator.__next__())
#     except StopIteration:
#         break



# print('------------------') #在一个迭代器取值干净情况下,再对取值取不到
# while True:
#     try:
#         print(d_iterator.__next__())
#     except StopIteration:
#         break




# with open('db_user.txt','rt',encoding='utf-8') as f:
#     f_iterator=f.__iter__()
#     while True:
#         try:
#             print(f_iterator.__next__(),end='')
#         except StopIteration:
#             break


#for循环的工作原理  for循环可以称为迭代器循环

# d={'a':1,'b':2}
# #1、d.__iter__()得到一个迭代对象
# #2、迭代器对象.__next__()拿到一个返回值,然后将返回值赋值给i
# #3、循环往复步骤2,直到抛出异常StopIteration 异常 for循环会扑捉异常然后结束循环
# for i in d:
#     print(i)
#

# while True:
#     try:
#         print(d_iterator.__next__())
#     except StopIteration:
#         break
res=list('hello') #与for循环工作原理一致
print(res)

# #优点:
#   - 提供一种统一的、不依赖于索引的迭代方式
#   - 惰性计算,节省内存
# #缺点:
#   - 无法获取长度(只有在next完毕才知道到底有几个值)
#   - 一次性的,只能往后走,不能往前退

#生成器

#自定义迭代器
#如何得到自定义的迭代器:
#在函数内一旦存在yield关键字,
#
def func():
    print('1')
    yield 10
    print('2')
    yield 12
    print('3')
    yield 23
    print('4')

res=func()
# print(res)#<generator object func at 0x000001C997D09430>生成器
res1=res.__next__()
print(res1)
res2=res.__next__()
print(res2)
res3=res.__next__()
print(res3)

#生成器就是迭代器

#会触发函数代码的运行,然后遇到yield停下来,将yield后的值
#当做本次调用的返回结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值