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

    迭代器

    查看是否可迭代

    from collections import Iterable
    from collections import Iterator
    print(isinstance('abc',Iterable))    #True
    print(isinstance('abc'.__iter__(),Iterator) )  #True
    s = "abcdefg" 
    c = s.__iter__()    # 获取迭代器
    print(c.__next__())   #获取一个元素  a
    print(c.__next__())    #b

    使用while循环和迭代器来模拟for循环

    lst = [1,2,3]
    it = lst.__iter__()
    while 1:
        try:
            i = it.__next__()
            print(i)
        except StopIteration:
            break

    迭代器特点: 1.节省内存  2.惰性机制  3.不能反复,只能向下执行

    生成器

    获取生成器的三种方法:

    1.通过生成器函数

    2.通过各种推导式来实现生成器

    3.通过数据的转换也可以获取生成器

    def func():
        print('aaa')
        yield 'bbb'
    gener = func()     #获取到生成器
    print(gener)     #===>   <generator object func at 0x10567ff68>
    ret =gener.__next__()   #执行函数
    print(ret)       # 返回数据

    yield是分段来执行一个函数,运行完最后一个yield会报错 ; return是直接停止执行函数

     send()和__next__()一样都可以让生成器执行到下一个yield

     send和__next__()区别:

      1.send和next()都是让生成器向下走一次

      2.send可以给上一个yield的位置传递值,不能给最后一个yield发送值.在一次执行生成器代码的时候不能使用send()

    生成器可以用for循环获取内部元素

    列表推导式    lst = [ i for i in range(1,10) ]

    生成器表达式   gen = ( i for i in range(1,10))     ==>  <generator object <genexpr> at 0x106768f10> 

    生成器表达式和列表推导式的区别:

    1.列表推导式比较消耗内存,一次性加载.生成器表达式几乎不占内存.使用的时候才分配和使用内存

    2.得到的值不一样,列表推导式得到的是一个列表,生成器表达式得到的是一个生成器.

    推导式:列表推导式 , 字典推导式 , 集合推导式 , 没有元组推导式  

  • 相关阅读:
    odoo action方法
    linux命令
    删除方法odoo
    odoo权限
    odoo方法
    odoo自动更新表中数据
    odoo
    odoo之recoed.append()方法
    odoo明细表汇总数据
    假期周进度报告1
  • 原文地址:https://www.cnblogs.com/gracenana/p/10197829.html
Copyright © 2011-2022 走看看