博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数生成器和生成器表达式
阅读量:6587 次
发布时间:2019-06-24

本文共 1529 字,大约阅读时间需要 5 分钟。

1. 生成器

  本质就是迭代器.
  一个一个的创建对象
  创建生成器的方式:
    1. 生成器函数
    2. 通过生成器表达式来获取生成器
    3. 类型转换(看不到)
2. 生成器函数 (重点)
  生成器函数中包含 yield , 返回数据和return差不多.
  return会立即结束这个函数的执行
  yield 可以分段的执行一个函数

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

  能向下执行的两个条件:

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

def  fun():    print("卢本伟,white,55开")    a = yield "卢本伟牛逼"    print(a)    yield "克里斯,关下门"    b = yield "克里斯关下门"    print(b)    c = yield "UU一血PDD拿"    print(c)    yield "卢本伟用纸一卷一卷"ret = fun()print(ret.__next__())print(ret.send("小凯凯"))print(ret.__next__())print(ret.send("小开开"))print(ret.send("小柚柚"))

  

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

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

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

  def func():
    print("卢本伟牛逼 ")

    yield "表面兄弟"

  gen = func()     # 创建生成器. 此时运行会把生成器函数中的代码记录在内存

  当执行到__next__(), 运行此空间中的代码, 运行到yield结束.

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

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

3. 各种推导式 (诡异)

  列表推导式 [结果 for循环 if]
  字典推导式 {结果(k:v) for循环 if}
  集合推导式 {结果(k) for循环 if}

 

lis=[]for i in range(1,5):    lis.append("伞兵%s号准备就绪"%i)print(lis)lis2 = ["伞兵%s号卢本伟准备就绪"%(i+1) for i in range(4) if i==0]print(lis2)

  

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],        ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]name = [el for i in names for el in i if el.count("e")==2]print(name)

  

dic = {"white": "卢本伟", "UU": "赵梦玥", "KOBE":"科比"}dic1 = { v:k for k,v in dic.items()}print(dic1)

  

4. 生成器表达式 (重点)

  (结果 for循环 if)

g = (i for i in range(10))     # 生成器表达式

转载于:https://www.cnblogs.com/gyc-tzx/p/10102385.html

你可能感兴趣的文章
不要把<a href="">当作按钮用
查看>>
原码, 反码, 补码 详解
查看>>
在fmri研究中,cca的应用历史
查看>>
[转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】...
查看>>
[Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面
查看>>
Apache mod_rewrite规则重写的标志一览
查看>>
不要让Javascript的等价表格看上去那么难看
查看>>
js作为参数,并且返回值;js的回调模式 callback
查看>>
filestream streamreader
查看>>
优秀博文
查看>>
Ckeditor 的加载顺序
查看>>
java内存模型(netty权威指南)
查看>>
Fragment问题集
查看>>
NSNotificationCenter详解
查看>>
【javascript】浮点数运算问题分析及解决方法
查看>>
TQ2440实现触摸屏和qt图形 解决segmentation fault
查看>>
HBase的JavaAPI使用
查看>>
Debian GNU/kFreeBSD是什么
查看>>
使用base64:url 来定义背景图片url
查看>>
Oracle事务隔离级别
查看>>