zoukankan      html  css  js  c++  java
  • python--生成器

    一 . 生成器

    复制代码
    本质就是迭代器.
    一个一个的创建对象
    创建生成器的方式:
      1. 生成器函数
      2. 通过生成器表达式来获取生成器
      3. 类型转换(看不到)
    复制代码

      生成器函数 (重点)

    复制代码
    生成器函数中包含 yield , 返回数据和return差不多.
      return会立即结束这个函数的执行
      yield 可以分段的执行一个函数
      生成器函数在执行的时候返回生成器. 而不是直接执行此函数
    
      能向下执行的两个条件:
        __next__(), 执行到下一个yield
        send(), 执行到下一个yield, 给上一个yield位置传值
    
      所有的生成器都是迭代器都可以直接使用for循环
      都可以使用list()函数来获取到生成器内所有的数据
    
      生成器中记录的是代码而不是函数的运行
    复制代码
    def func():
        print('赌神')
        yield '高进'
    g = func() # 创建生成器,此时运行会把生成器中的代码记录在内存,当执行到__next__(),运行此空间的代码,运行到yield结束.

      优点: 节省内存, 生成器本身就是代码. 几乎不占用内存
      特点: 惰性机制, 只能向前. 不能反复

    二 . 各种推导式

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

    lst = ['张无忌','吴奇隆','刘诗诗','范冰冰','张翠山']
    lst1 = [i for i in lst if i[0] == '张']
    print(lst1) 

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

    dic = {"主食": "炒面", "副食": "小拌菜", "汤":"疙瘩汤"}
    dic1 = {v:k for k,v in dic.items() }
    print(dic1)

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

    set = {'赌神','赌圣','赌侠','侠客'}
    list = {k for k in set if k[0] == '赌'}
    print(list)

    三 . 生成器表达式

    ( 结果 for循环 if )   # 用小括号括起来
  • 相关阅读:
    高斯消去法
    【转】sscanf和sprintf是scanf和printf家族的一对成员
    ps电信
    XNA准备篇(一)
    超级BT的SQL2008 在WIN7下附加 SQL2005的数据库
    绘制半口角
    动态的在输入框边上显示可输入的剩余字符数
    CallContext vs. ThreadStatic vs. HttpContext[待翻译]
    Vista 系统下安装 GhostDoc for Visual Studio 2008
    非常优秀的开源框架地址
  • 原文地址:https://www.cnblogs.com/uiys/p/10673145.html
Copyright © 2011-2022 走看看