zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    设计模式(一)工厂模式Factory(创建型)
    c++ 依据输入动态声明数组(一维,二维)
    【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
    正确的 zip 压缩与解压代码
    站点设计高性能高并发
    hdu 1712 ACboy needs your help 分组背包
    17周 oj 比較大小 类模板
    并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环
    数据库升级ora-04063 DBMS_REGISTRY has error
    对软件体系结构的认识
  • 原文地址:https://www.cnblogs.com/a352735549/p/8709947.html
Copyright © 2011-2022 走看看