day12 生成器和各种推导式
今天主要学习了
1.生成器
2.生成器函数
3.各种推导式(比较诡异,理解了很简单,不理解很难)
4.生成器表达式(重点)
一.生成器
def func():
print'我叫周润发'
return '林志玲' #return在函数中表示返回的意思 set=func()
print(set)
这里的set 就是创建了一个生成器 注意: (大坑) 生成器函数运行之后,产生了一个生成器,而不是执行函数
本质就是个迭代器 ,一个一个的创建对象
创建生成器的方法 :
1.生成器函数
2. 通过生成器表达式来获取生成器
3. 类型转换 (前期基本上看不到,后期才接触)
二 .生成器函数 :
生成器函数中包含了yield ,返回数据和return差不多 ,但是yield不会终止函数,
yield : 可以分段执行一个函数
return : 执行后会立即结束这个函数的执行
生成器函数会在执行的时候返回生成器 ,而不是执行此函数
能够向下执行的2个条件 :
1 . __next__() 执行到下一个yield
2. send() ,执行到下一个yield ,给上一个yield位置传递一个值
所有的生成器都是可迭代的 ,也就是说都可以直接使用for循环
都可以使用list()函数来获取到生成器内所有的数据 .
生成器中记录的是代码而不是函数的运行
def func():
print'我的天啊'
yield '天呐' gen=func() # 创建生成器. 此时运行会把生成器函数中的代码记录在内存 ,当执行到__next__(),
运行此空间中的代码,运行到yield结束.
生成器函数的特点:
优点: 节省内存 , 生成器本身就是代码,几乎不占用内存
特点: 惰性机制 ,只能向前,不能后退
三 .各种推导式
列表的推导式 lis=[结果 for循环 if条件]
# 想知道老男孩一共开了多少期
lst=['python%s期'%i for i in range(1,19)]
print(lst) # 生成列表.类表中装的数据是 1-100之间所有的偶数的平方
lst=[i**2 for i in range(1,101) if i%2==0]
print(lst)
字典的推导式 dic={结果(k:v) for循环 if条件}
dic= {"主食": "炒面", "副食": "小拌菜", "汤":"疙瘩汤"}
# 把字典的key和value互换, 生成新字典
d={v,k for k,v in dic.items()}
print(d)
集合的推导式 set={结果(k) for循环 if条件}
集合的推导式和字典一样 ,只不过字典返回的值有k,v ,而集合只有一个返回值
注 : 元组没有推导式
四 .生成器表达式 (重点)
(结果 for循环 if条件)
g=(结果 for i in range(10)) print(g) #<generator object <genexpr> at 0x0000000009E573B8> g=(i for i in range(10) ) #生成器表达式
# 生成器函数
# def func():
# print(111)
# yield 222
#
# #提示: 惰性机制, 只能向前
# g = func() # 创建生成器
# g1 = (i for i in g) # 生成器表达式
# g2 = (i for i in g1) # 生成器表达式
#
# #
# print(list(g)) #list 里面有__next__一次性将func中的内容全部拿空
# print(list(g1)) # for -> __next__()
# print(list(g2))
结果 [222] [] [] #原因 : g已经将func的内容拿空了,g1 ,g2在想拿的时候已经没有了,
所以为空列表
day12 生成器和各种推导式的更多相关文章
- python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式
一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...
- Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数
Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: 就是迭代器 生成器产生的方式: 1.生成器函数
- Python-02 生成器表达式,列表推导式
列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for 变量i in 可迭代的数据类型 ] 列表 ...
- python之生成器和列表推导式
一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成 ...
- day14.生成器进阶,推导式
生成器中取值的三种方法 方法1:next() 方法2:for 循环 方法3:数据类型的强制转换 def func(): for i in range(20): yield '赛车*{}'.format ...
- 【python】 迭代器、生成器、列表推导式
一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...
- Python_迭代器、生成器、列表推导式,生成器表达式
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...
- python 生成器和各种推导式
##################################总结############################### 什么是迭代器? 可迭代对象通过__iter__()可以转换成迭代 ...
- python全栈开发day13-迭代器、生成器、列表推导式等
昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__ ...
随机推荐
- 有效利用1 on 1
2019-01-08 16:32:13 感觉1 on 1是浪费时间? 感觉1 on 1时没啥好说? 感觉老板总是不想1 on 1? 怎样才能 升职加薪? 一切都从有效的1 on 1开始!! 什么是1 ...
- Redis持久化AOF和RDB对比
RDB持久化 AOF持久化 全量备份,一次保存整个数据库 增量备份,一次保存一个修改数据库的命令 保存的间隔较长 保存的间隔默认一秒 数据还原速度快 数据还原速度一般 save会阻塞,但bgsave或 ...
- JS 日期比较方法
1.日期参数格式:yyyy-mm-dd // a: 日期a, b: 日期b, flag: 返回的结果 function duibi(a, b,flag) { var arr = a.split(&qu ...
- Android+Struts2实现简单的前后台交互--Android网络编程
1.下面测试截图,基本过程就是:点击按钮向服务器端发送请求,后台收到请求后给出返回的数据,前台只需要显示服务端数据就可以了.例子很简单能但引发很多思考,博主学了杂七杂八的,这又在来想杂学Android ...
- Postman发包form-data、x-www-form-urlencoded、raw、binary的区别
首先普及下http的Post四种Content-Type Postman中post编码方式form-data.x-www-form-urlencoded.raw.binary的区别 x-www-for ...
- stark 组件 url 二级分发的实现
模拟 admin 组件url设计思路 项目urls 文件中: from django.contrib import admin from django.urls import path from st ...
- 微信小程序发起微信支付
点击链接查看详情:(支付中配置参数需要从后台得到->签名需要从微信申请才可以得到) https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.h ...
- php 递归删除文件夹
/*** 递归删除文件方法一 param $path 文件路径 **/ function delAll($path){ $path=str_replace('\\','/',$path);//去除反斜 ...
- H5活动页面与APP交互规则
IOS: 用户信息请求:window.webkit.messageHandlers.GetUserInfo.postMessage(jsonData); 参数:jsonData 回调方法:iosDel ...
- mybatis*中DefaultVFS的logger乱码问题
从网上下的Java Persistence with MyBatis 3的源码 出现这个问题的原因是logback记日志的时候乱码 ResolverUtil - Not a JAR: file:... ...