zoukankan      html  css  js  c++  java
  • Python生成器

    1. 生成器

        本质就是迭代器.

        一个一个的创建对象

        创建生成器的方式:

            1. 生成器函数

            2. 通过生成器表达式来获取生成器

            3. 类型转换

    2. 生成器函数

        生成器函数中包含 yield , 返回数据和return差不多.

        return会立即结束这个函数的执行

        yield 可以分段的执行一个函数

        生成器函数在执行的时候返回生成器. 而不是直接执行此函数

        能向下执行的两个条件:

            __next__(), 执行到下一个yield

            send(), 执行到下一个yield, 给上一个yield位置传值

        所有的生成器都是迭代器都可以直接使用for循环

        都可以使用list()函数来获取到生成器内所有的数据

        生成器中记录的是代码而不是函数的运行

    def func():
        print("我的天哪 ")
        yield "宝宝"
    gen = func() # 创建生成器.  此时运行会把生成器函数中的代码记录在内存
    # print(ret.__next__()) # 当执行到__next__(), 运行此空间中的代码, 运行到yield结束

        优点: 节省内存, 生成器本身就是代码. 几乎不占用内存

        特点: 惰性机制, 只能向前. 不能反复

    3. 各种推导式 

        列表推导式  [结果 for循环 if]

    lst = [i**2 for i in range(1, 101) if i%2 == 0]
    print(lst)

        字典推导式 {结果(k:v) for循环 if}

    dic =  {"主食": "米饭", "副食": "凉菜", "":"菠菜汤"}
    d = { v:k for k, v in dic.items()}
    print(d)

        集合推导式 {结果(k) for循环 if}

    set1 = {"张无忌", "吴奇隆", "张诗诗", "范冰冰", "张翠山"}
    set2 = {name for name in lst if name.startswith("")}
    print(set2)

    4. 生成器表达式 

        (结果 for循环 if)

    g = (i for i in range(10)) # 生成器表达式
    print(g.__next__())  # 当执行到__next__(), 运行此表达式中的代码
  • 相关阅读:
    撩妹技能 get,教你用 canvas 画一场流星雨
    git详细使用教程入门到精通(史上最全的git教程)
    Google Performance工具,你还不会用?Git走起。
    使用PIE.htc让万恶的IE内核浏览器IE678支持CSS3部分属性
    HTML编码规范
    Canvas制作的下雨动画
    Flex 布局教程:语法和实例
    CSS编码规范
    奇葩程序写的神一样的注释,被老板看见会不会开出呢?
    Vertical-Align你应该知道的一切
  • 原文地址:https://www.cnblogs.com/fu-1111/p/10102538.html
Copyright © 2011-2022 走看看