python第三十五课——生成器
1.生成器: 什么是生成器? 它内部封装了一套公式/算法,只有等到需要调用/执行数据时 --> next()函数执行 才会将公式计算得到数据结果,这就是生成器的原理(核心思想); 【注意事项】: 1).生成器中是没有真实数据存在,所以我们是不能直接使用len()函数来尝试得到其长度 如果我们这么做了,会报错:StopIteration 2).生成器中关联的真实数据只能被使用一次,不可逆 格式:两种 执行返回一个generator类型对象 1). (条件表达式 for 参数列表 in 容器对象) 2). 定义函数,在函数的内部需要使用yield关键字来记录返回的generator对象的数据公式, 【注意】函数此时如果有return,已经无视了/没有作用了,返回的一定是generator 演示生成器的定义和使用:
#格式1:(条件表达式 for 参数列表 in 容器对象)
gen=(x for x in range(5))
print(gen,type(gen)) #generator对象不能配合len()来获取其长度
print(len(gen)) #使用next()函数来得到每一次genexpr中的内容
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen)) #generator对象中的数据内容只能被解析使用一次,不可逆;一旦调用多了,直接报错;
# StopIteration
print(next(gen))
以下是两种解析处理generator对象的方式:
方式一:使用next()函数调用,如果调多了,报错:StopIteration
方式二:使用循环处理,如果调多了,不会报错,什么都看不到-->这样的方式更加友好
print(next(gen))
print(next(gen))
for g in gen:
print('')
print(g)
print(next(g))
print('*'*50) for g in gen:
print(g)
需求:思考如果对于gen对象中的真实数据我需要用到多次,那怎么办?
可以将generator对象gen转换为一个譬如list对象即可
gen=(x for x in range(5))
lt=list(gen)
print(lt,type(lt)) for i in lt:
print(i)
print('*'*50) i=0
while i<len(lt):
print(lt[i])
i+=1
格式2:
定义函数,在函数的内部需要使用yield关键字来记录返回的generator对象的数据公式,
【注意】函数此时如果有return,已经无视了/没有作用了,返回的一定是generator
def func(n):
lt=[]
for i in range(1,n+1):
if i%2==0:
lt.append(i)
yield i
return lt f=func(10)
print(f,type(f)) print(len(f))
print(next(f)) for i in f:
print(i) print(list(f)) gen=(x for x in range(1,11) if x%2==0)
for g in gen:
print(g)
需求:实现全排列
str1='ABC'
str2='XYZ'
def func2(str1,str2):
for s1 in str1:
for s2 in str2:
yield s1 + s2 gen=func2(str1,str2)
print(gen,type(gen)) for g in gen:
print(gen) print('*'*50) gen=(x+y for x in str1 for y in str2)
for g in gen:
print(g)
比较:列表生成式和生成器? 对于生成器而言: 定义执行会得到一个generator对象, 此对象中没有真实数据(第一手没值),它内部封装了一套公式/算法, 一旦需要使用数据了,就会计算公式,得到内容; 就因为这样的特点,所以我们得出结论: 1).生成器比较节省内存资源(好处) 2).在数据运算时比列表生成式效率要慢一点(弊端) 对于列表生成式而言: 定义执行会得到一个列表对象, 在定义执行完毕后,列表中已经确定了真实的数据(进内存了) 就因为这样的特点,所以我们得出结论: 1).列表生成式比较占用内存资源(弊端) 2).在数据运算时比生成器效率要快一点(好处)
python第三十五课——生成器的更多相关文章
- NeHe OpenGL教程 第三十五课:播放AVI
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Python进阶(三十五)-Fiddler命令行和HTTP断点调试
Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- 第三十五课:Ajax详解
一个完整的Ajax请求: var xhr = new (self.XMLHttpRequest || ActiveXObject)("Microsoft.XMLHTTP"); ...
- python第三十五天-----作业完成--学校选课系统
选课系统:角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含, ...
- python第三十二课——队列
队列:满足特点 --> 先进先出,类似于我们生活中的买票.安检 [注意] 对于队列而言:python中有为其封装特定的函数,在collections模块中的deque函数就可以获取一个队列对象; ...
- python第四十五课——继承性之多继承
测试模块 演示多继承的结构和使用: 子类:Child 直接父类(多个):Father.Mother 注意: 由于有多个直接父类,多个父类都要自己给其属性赋值, 避免混淆,我们使用类名.__init__ ...
- python第三十八课——面向对象(一)
1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...
- python第三十二课——栈
栈:满足特点 --> 先进后出,类似于我们生活中的子弹夹 [注意] 对于栈结构而言:python中没有为其封装特定的函数,我们可以使用list(列表)来模拟栈的特点 使用list对象来模拟栈结构 ...
随机推荐
- sql 中有关时间的语句
1.比较得到两个时间相差的间隔 SELECT datediff(minute, ’2009-04-28 12:05:00′, getdate()); SELECT datediff(month, ’2 ...
- SQL Server T—SQL 语句【查】
一 查询数据(关键字:select) (1)简单查询 select * from 表名 ——查全表 select 列名 from 表名 select ...
- .net Core 部署到 Linux
1.环境说明 服务器系统:CentOS 7.4 64位 相关工具:Xshel.Xftp .net Core版本:2.2 VS版本:2017 服务器软件软件:.netcore.nginx.superv ...
- [日常] 高性能MySQL-索引
1.mysql的索引工作类似一本书的目录部分,想找某个特定主题,先查找书的目录部分,找到对应的页码2.ORM工具只能生成基本的合法的查询3.索引是在存储引擎层实现的,不是服务器层4.B-tree就是指 ...
- [日常] Go语言圣经-可变参数习题
1.参数数量可变的函数称为为可变参数函数,例子就是fmt.Printf和类似函数2.参数列表的最后一个参数类型之前加上省略符号“...”3.虽然在可变参数函数内部,...int 型参数的行为看起来很像 ...
- Java基础——iO(一)
此文为了解IO知识的基础篇,这块我看了几天,感觉和前段时间学习集合一样,零散又重要.想记录一下这块由浅入深的学习过程.所以,接下来会记录几篇学习笔记,之后会有以前深入总结.因为这块比较重要啊,所以一定 ...
- @ModelAttribute注解详解
@ModelAttribute注解详解 1.@ModelAttribute定义: 被该注解定义的方法,会在该方法所在的controller的任何目标方法执行之前执行 2.@ModelAttribute ...
- Linux常用基本命令(chmod)
chmod命令用来改变文件或者目录的权限,只有文件的属主和超级用户才能够执行这个命令 格式: chmod [option] [mode] [file] >常用参数选项 -R : 递归修改目录以及 ...
- log4net 本地环境没问题 生产环境无法输出日志
log4net输出日志大概分两块 1.程序代码编写问题 2.配置文件问题 当程序本地可以正常输出日志.配置文件也都正常可用的情况下,发布到生产环境后,有的程序可以输出日志,有的程序不可以输出,程序无问 ...
- Oracle 参数文件及相关操作介绍
Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...