生成器函数,推导式,生成器表达式
一.生成器
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
生成器函数,推导式,生成器表达式相关推荐
- python之生成器(~函数,列表推导式,生成器表达式)
一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...
- 生成器 生成器函数 各种推导式 生成器表达式
生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) def func():print("我叫周润 ...
- python生成器推导式的结果是一个什么类似于对象_python 生成器和推导式
一. 生成器 什么是生成器. 生成器实质就是迭代器. 在python中有三种方式来获取生成器: 1. 通过生成器函数 2. 通过各种推导式来实现生成器 3. 通过数据的转换也可以获取生成器 首先, 我 ...
- python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】
python [迭代器 生成器 列表推导式] 一.迭代器 1.迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含 ...
- python — 生成器、推导式、递归
目录 1 生成器(函数的变异) 2 推导式 3 递归 1 生成器(函数的变异) 判断一个函数是否是生成器函数:只需看函数内部是否有yield # 生成器函数(内部是否包含yield) def func ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...
一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...
- python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式
python中三元表达式的语法如下 ===if else result = x if condition else y 另外一种三元表达式,比较少见 result = (x, y)[condition ...
- Python中的装饰器、迭代器、生成器、推导式、匿名函数和高阶函数
文章目录 装饰器 迭代器 生成器 推导式 匿名函数 高阶函数 装饰器 闭包 介绍装饰器前先了解一下闭包,在Python中,一切皆对象(Object),函数(Function)也不例外,也是一个普通的对 ...
最新文章
- springboot整合freemarker(转)
- android组件权限,Android中Permission权限机制的具体使用
- 3大主流前端框架对比
- python中的参数值无法传递_python中关于函数参数值传递的问题
- 在web项目中集成xfire的方法
- 嵌入式Linux系统编程学习之二十八线程的等待退出
- 如何在Android中使用OpenCV
- 好程序员web前端分享web开发概况
- 19【推荐系统9】WideDeep和DeepCross模型
- 花了很长时间看完了 java编程思想
- AI上推荐 之 xDeepFM模型(显隐性高阶特征交互的组合策略)
- server2008 mysql数据库病毒_sql server 2008 数据库可疑的解决步骤
- android5.1导航系统,北斗地图导航系统
- html点击自动复制文本代码,点击网页按钮复制指定代码JS源码
- percentile_approx函数用法
- VC界面程序中文字乱码问题
- 将阿拉巴数字转为中文格式数字,限整形
- 让Enter键实现Tab键的功能
- 基于八叉树的空间划分及搜索操作-阿里云开发者社区
- matlab符号矩阵入门