一.生成器

1生成器的定义

  生成器的本质是迭代器

  生成器一般由生成器函数或者生成器表达式来创建

  生成器是手写的迭代器

2.生成器的特点

  生成器的特点和迭代器一样.

(1)惰性机制

(2)节省内存

(3)只向下进行

3.生成器的取值方式

  生成取值方式和迭代器一样

(1)__next__()

(2)send():给上一个yield传值.

二.生成器函数

1.和普通的函数没有什么区别.里面有yield的函数就是生成器函数.

def func():print("哈哈")yield 1
gen = func()  #不会执行函数,拿到的是生成器

2.生成器函数在执行的时候.默认不会执行函数体,而会形成生成器,通过生成器的__next__()分段执行这个函数

def order():for i in range(10000):yield "衣服"+str(i)
g = order() # 获取生成器
mingwei = g.__next__()
print(mingwei)
zhaoyining = g.__next__()
print(zhaoyining)

3.send()给上一个yield传值,不能开头(没有上一个yield),最后一个yield也不可以用send()

def eat():print("我吃什么啊")a =  yield  "馒头"print("a=",a)b =  yield  "鸡蛋灌饼"print("b=",b)c =  yield  "韭菜盒子"print("c=",c)yield  "GAME OVER"
gen = eat()      # 获取生成器

ret1 = gen. __next__()
print(ret1) # 馒头
ret2 = gen.send("胡辣汤")
print(ret2)ret3 = gen.send("狗粮")
print(ret3)
ret4 = gen.send( "猫粮")
print(ret4)

for i in func(): # for的内部一定有__next__()print(i)print(list(func())) # 内部都有__next__()

三.推导式

1.列表推导式  [结果 for循环 条件筛选]

lst = []
for i in range(1, 16):lst.append("python"+str(i))
print(lst)

lst = ["python"+str(j) for j in range(1,16)]
print(lst)

lst = ["pytjon"+str(j) for j in range(1,6)]
print(lst)

View Code

lst = [i for i in range(1000) if i%2==1]
print(lst)

奇数

lst = [i*i for i in range(100) if i%3==0]
print(lst)

100以内能被3整除的数的平方

#寻找名字中带两个e的人的名字
name = [["Tom","Billy","Jefferson","Andrew","Wesley","Steven","Joe"],
["Alice","Jill","Ana","Wendy","Jennifer","Sherry"]]
lst = [name for line in names for name in line if type(name)==str and name.count("e")==2]
print(lst)

2.字典推导式  {K:v  for循环  条件筛选}

#[11,22,33,44]  =>{0:11, 1:22, 2:33, 3:44}
lst = [11,22,33,44]
dic = {i:lst[i]  for i in range(len(lst)) if i < 2}
print(dic)dic = {"jj": "林俊杰", "jay": "周杰伦", "zs": "赵四", "ln":"刘能"}
d = {v : k for k,v in dic.items()}
print(d)

3.集合推导式 {k    for循环  条件筛选}

s = {i for i in range(100)} # 可去除重复
print(s)

四.生成器表达式

(结果  for循环  条件)

特点:    1. 惰性机制    2. 只能向前    3. 节省内存(鸡蛋)
#生成器函数
def func():print(111)yield 222yield 333
g = func #获取生成器
g1 = (i for i in g)#生成器
g2 = (i for i in g1) #生成器
print(list(g))  #[222,333] 源头,从源头把数据拿走了
print(list(g1))  #[]    这里执行的时候,源头已经没有数据了
print(list(g2))  #[]   这里也没有值了

# 求和
def add(a, b):return a  + b# 生成器函数 #  0-3
def test():for r_i in range(4):yield  r_i# 0,1,2,3
g = test() # 获取生成器for n in  [2, 10]:g = (add(n, i) for i in g)
print(g)# 到最后往里面放数据就对了
# print(list(g))
# print(list(g)) # []

当生成器没执行的时候,无论生成器里的值,还是别的值都不拿

转载于:https://www.cnblogs.com/Bug66/p/9467532.html

生成器函数,推导式,生成器表达式相关推荐

  1. python之生成器(~函数,列表推导式,生成器表达式)

    一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...

  2. 生成器 生成器函数 各种推导式 生成器表达式

    生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) def func():print("我叫周润 ...

  3. python生成器推导式的结果是一个什么类似于对象_python 生成器和推导式

    一. 生成器 什么是生成器. 生成器实质就是迭代器. 在python中有三种方式来获取生成器: 1. 通过生成器函数 2. 通过各种推导式来实现生成器 3. 通过数据的转换也可以获取生成器 首先, 我 ...

  4. python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】

    python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含 ...

  5. python — 生成器、推导式、递归

    目录 1 生成器(函数的变异) 2 推导式 3 递归 1 生成器(函数的变异) 判断一个函数是否是生成器函数:只需看函数内部是否有yield # 生成器函数(内部是否包含yield) def func ...

  6. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  7. format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  8. python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式

    python中三元表达式的语法如下 ===if else result = x if condition else y 另外一种三元表达式,比较少见 result = (x, y)[condition ...

  9. Python中的装饰器、迭代器、生成器、推导式、匿名函数和高阶函数

    文章目录 装饰器 迭代器 生成器 推导式 匿名函数 高阶函数 装饰器 闭包 介绍装饰器前先了解一下闭包,在Python中,一切皆对象(Object),函数(Function)也不例外,也是一个普通的对 ...

最新文章

  1. springboot整合freemarker(转)
  2. android组件权限,Android中Permission权限机制的具体使用
  3. 3大主流前端框架对比
  4. python中的参数值无法传递_python中关于函数参数值传递的问题
  5. 在web项目中集成xfire的方法
  6. 嵌入式Linux系统编程学习之二十八线程的等待退出
  7. 如何在Android中使用OpenCV
  8. 好程序员web前端分享web开发概况
  9. 19【推荐系统9】WideDeep和DeepCross模型
  10. 花了很长时间看完了 java编程思想
  11. AI上推荐 之 xDeepFM模型(显隐性高阶特征交互的组合策略)
  12. server2008 mysql数据库病毒_sql server 2008 数据库可疑的解决步骤
  13. android5.1导航系统,北斗地图导航系统
  14. html点击自动复制文本代码,点击网页按钮复制指定代码JS源码
  15. percentile_approx函数用法
  16. VC界面程序中文字乱码问题
  17. 将阿拉巴数字转为中文格式数字,限整形
  18. 让Enter键实现Tab键的功能
  19. 基于八叉树的空间划分及搜索操作-阿里云开发者社区
  20. matlab符号矩阵入门

热门文章

  1. block,inline和inlinke-block细节对比
  2. c++--类的作用域
  3. 转帖Masonry介绍与使用实践(快速上手Autolayout)
  4. 编程基础C——常量,变量,运算符个人总结
  5. java 蓝桥杯算法提高 成绩排序2
  6. 虚拟机查看cpu型号_CentOS7安装KVM虚拟机
  7. NameNode之租约管理
  8. HDFS小文件问题解决方案
  9. HBase之HFile详解
  10. 基于FPGA实现DDS正弦波发生器