• Day13


    1、迭代器

    内部含有__iter__方法的对象就叫做可迭代对象

    可迭代对象遵循可迭代协议

    for循环可以循环的就是可迭代对象

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

       迭代器:f1文件句柄

    如何判断 两种方式

    s='laonanhai'
    print('__iter__' in dir(s))
    l=[1,2,3,4]
    from collections import Iterable
    print(isinstance(l,Iterable)) #True print(type(l)) #class list print(isinstance(l,list)) #True

    迭代器

    l1=[1,2,3]

    可迭代对象转化成迭代器:可迭代对象.__iter__()    --->迭代器

    迭代器不仅含有__iter,还含有__next__ 遵循迭代器协议

    l1_obj=l1__iter__()  #迭代器
    print('__iter__' in dir(l1_obj))
    print('__next__' in dir(l1))
    print('__next__' in dir(l1_obj))
    print(l1_obj.__next__())
    for i in l1_obj:
        print(i)

    判断迭代器:

    print('__iter__' in dir(s))

    print('__iter__' in dir(s))

    print(isinstance(s,Iterable))

    迭代器的好处:

    1、节省内存空间

    2、满足惰性机制

    3、不能反复取值,不可逆

    #1、将可迭代对象转化成迭代器
    #2、内部使用__next__方法取值
    #3、运用了异常处理去处理报错
    l2=[1,2,3,4,5,6,7,8]
    l2_obj=l2.__iter__()
    while True:
        try:
            i=l2_obj.__next__()
            print(i)
            except Exception:
                break

    2、生成器

    生成器本质上是迭代器

    l=[1,2,3]

    l.__iter__()

    生成器的产生方式:

    1、生成器函数构造

    2、生成器推导式构造

    3、数据类型的转化

    def func1():
        print(111)
        print(222)
        print(333)
        yield 666
        yield 555
        yield 777print(g.__next__())
    print(g.__next__())
    print(g.__next__())

    第一:函数中只要有yield那他就不是一个函数,而是一个生成器

    第二:g称为生成器对象

    def func1():
        for i in range(1,10001):
            yield '老男孩校服%d号' %i
    g=func1()
    for i in range(50):
        print(g.__next__())
    for j in range(150):
        print(g.__next__())
    l1=[i for i in range(1000)]
    print(l1)

    send:next和send功能一样,都是执行一次

    send可以给上一个yield赋值

    def generator():
        print(123)
        content = yield 666
        print(content)
        print(456)
        yield 777
    g = generator()
    g.__next__()
    g.send('hello')
    from collections import Iterable
  • 相关阅读:
    Powerdesigner数据库建模--概念模型--ER图【转】
    oralce闪回
    DBA
    linux socket使用经验总结
    寒假学习笔记1:结构化程序设计
    寒假作业2:简化电梯设计elevator
    鹤发银丝映日月,丹心热血沃新花——忆三位良师
    走廊泼水节
    种树
    P2938 [USACO09FEB]股票市场Stock Market
  • 原文地址:https://www.cnblogs.com/a352735549/p/8709947.html
Copyright © 2020-2023  润新知