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

    1.两种创建方式generator

    1.1 s = (x*x for x in range(10))

    这种创建方式打印s为:

    <generator object <genexpr> at 0x0000028B68B47888>

    1.2 

    def f():
    print("ok")
    yield 1
    print("ok1") # next标识
    yield 2
    print("ok2")
    return None
    f()

    这时候的s和f()都是一个可迭代对象iteration。

    相对与列表生成器相当于找了一个厨师,但是菜并没有做好。列表是将所有的元素都存储在内存中。

    1.2next方法

    next(s)便可以调出s第一个的元素。

    next(f())

    next(f())

    next(f()) # 打印3个OK 不报错 用一个变量接收
    ########################################
    g = f()
    next(g) # 打印ok ok1 ok2 并报错 ok2 之所以被打印看ga()
    next(g)
    next(g)

    注意要用一个变量接收它。

    def ga():
    print("ok")
    count = yield 1 # yield 相当于冻结了函数 下次的next会接着这里yield开始 debug下
    print(count)
    print("ok1")
    yield 2
    b = ga()
    t = b.send(None) # 等于next(b) 但是不能直接send”gaga“ 会报错 没有值让你赋值
    print(t)
    b.send("gaga")
    #jieguo: ok gaga ok1

    2.迭代器iterator

    # 生成器都是迭代器(iterator) 迭代器包含生成器
    l = [1,2,3,4] # 可迭代对象
    d = iter(l)
    print(d) # <list_iterator object at 0x0000016C2AE36C18>
    # 什么是迭代器 1.有iter 2.有next
    print(next(d))
    ###########################################3
    for i in [1,2,3,4]:
    print(i)
    # for 循环所做的事情
    #1.调用iter方法返回一个迭代器对象
    #2. 不断调用对象的next方法
    #3. 处理异常StopIterator

    from collections import Iterator,Iterable
    print(isinstance(l,list))
    print(isinstance(d,Iterator))

  • 相关阅读:
    提高php代码效率的几点
    jquery各种操作复选框(全选、全不选、自动勾选、反选……)
    封装PDO单例模式类
    Git常用命令
    简化版的sqlserver分页
    Sql Server 数据分页
    Linux 下动态链接库搜索路径问题
    mysqlperformanceblog
    vim 退格键(backspace)不能用
    Linux vi/vim 编辑命令总结
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/5872634.html
Copyright © 2011-2022 走看看