zoukankan      html  css  js  c++  java
  • 迭代器,生成器

    ---恢复内容开始---

    一,什么是可迭代对象?迭代对象与迭代器的区别?

    只含有__iter__方法的数据是可迭代对象  含有__iter__方法,并且含有__next__方法的数据是迭代器

    拥有__iter__方法的对象叫可迭代对象 遵循可迭代协议.

    1 判断是否为可迭代对象   dir()显示对象的所有方法

    可迭代对象有:str list tuple dict set range

    第一种方法
    s = 'abc' print('__iter__' in dir(s)) print('__iter__' in dir(333))

    结果:

    方法二  导入一个模块  from collections import Iterable 

    l = [1,2,3]
    l_iter = l.__iter__()
    from collections import Iterable  #判断是否为迭代对象
    from collections import Iterator  #判断是否为迭代器
    print(isinstance(l,Iterable))
    print(isinstance(l,Iterator))
    print(isinstance(l_iter,Iterator))
    print(isinstance(l,list))

    结果:

    二.迭代器  具有__iter__并且具有__next__方法的对象叫迭代器   遵循迭代器协议

    迭代器的意义?

    1,迭代器节省内存.

    2,迭代器惰性机制.

    3,迭代器不能反复,一直向下执行.

     1. 迭代对象转化成迭代器

    #迭代器取值:
    s2 = 'abcd'
    s3 = s2.__iter__()
    print(s3.__next__())
    print(s3.__next__())
    print(s3.__next__())
    print(s3.__next__())

    结果:

    for循环与迭代器的比较

    # for循环的机制.
    #内部含有__iter__方法,他会将可迭代对象先转化成迭代器.
    #,然后在调用__next__方法.
    # 他有异常处理的方法.
    for i in [1,2,3]:
        print(i)
    
    l = [1,2,3]
    l_iter = l.__iter__()
    while True:
        try:
            print(l_iter.__next__())
        except StopIteration:
            break

    结果:

    三 什么是生成器?
    生成器的本质就是迭代器,
    1 生成器是自己用python代码写的迭代器.
    1,可以用生成器函数
    2,可以用各种推导式构建迭代器.
    3,可以通过数据转化.
    #生成器函数 生成器
    def gener():
        print('aaa')
        yield 222    #一个yield打印一次
        print('bbb')
        yield 333
        print('ccc')
    g = gener()    #g为生成器的内存地址
    print(g)
    print(g.__next__())

    结果:

    2 return yield 区别
    return 返回给调用者值,并结束此函数.
    yiled 返回给调用者值,并将指针停留着当前位置.
    def gener():
        yield 222
        count = yield 333
        print('-------->',count)
        b=yield 'aaa'
        print(b)
        a = yield 'aaa'
        print (a)
    g = gener()
    print(g.send(None))
    print(g.send(None))
    print(g.send('AAAA'))
    print(g.send('wwwwww'))

    结果:

  • 相关阅读:
    CCF CSP-J/S2020第二轮认证评级名单
    CSP-J/S2020第二轮提高组北京市获奖分析
    CCF CSP-J/S2020第二轮评级规则
    [ZZ]80% 的信息学竞赛生都不知道的 USACO!含金量极高
    初步估分体验
    【ZZ】近3年北京市科技特长生招生趋势分析,编程好的孩子有哪些优势?
    立冬--2020CSP-J 游记
    P1061 Jam的计数法
    P1476 休息中的小呆
    P1444 [USACO1.3]虫洞wormhole
  • 原文地址:https://www.cnblogs.com/wzbk/p/8423571.html
Copyright © 2011-2022 走看看