今天主要学习了

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在想拿的时候已经没有了,所以为空列表

  

转载于:https://www.cnblogs.com/zty1304368100/p/10102673.html

day12 生成器和各种推导式相关推荐

  1. python基础之生成器,生成器函数,列表推导式

    内容梗概: 1. 生成器和生成器函数. 2. 列表推导式. 1.生成器函数1.1 生成器函数. 就是把return换成yield def gen():print("爽歪歪")yie ...

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

    一.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...

  3. python中哪个函数能生成集合_神奇的python系列11:函数之生成器,列表推导式

    1.生成器 生成器的本质是迭代器. 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 #函数 deffunc():prin ...

  4. python列表推导式实现从1加到100_python之生成器和列表推导式

    一.生成器函数 1.生成器:就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.用以下两种方式构建一个生成器: ...

  5. python (八)迭代器、生成器、列表推导式

    一.迭代器 1.先来讲讲什么是可迭代对象 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 2.怎么判断是不是一个可迭代对象 判定方法:内部含有'__iter__'方法的数据就 ...

  6. day 012 生成器 与 列表推导式

    生成器的本质就是迭代器,写法和迭代器不一样,用法一样. 获取方法: 1.通过生成器函数 2.通过各种推导式来实现生成器 3.通过数据的转换也可以获取生成器 例如: 更改return 为 yield 即 ...

  7. day14.生成器进阶,推导式

    生成器中取值的三种方法 方法1:next() 方法2:for 循环 方法3:数据类型的强制转换 def func():for i in range(20):yield '赛车*{}'.format(i ...

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

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

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

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

最新文章

  1. MATLAB实例路径与安装路径
  2. 高级政工师具备的能力_一个合格的政工师应该具备哪些条件与素质
  3. python dataframe删除指定行_pandas.DataFrame删除/选取含有特定数值的行或列
  4. 分治 —— 01 分数规划
  5. golang基础-WaitGroup、kafka消费者
  6. Nginx配置优化解读
  7. Kubernetes 小白学习笔记(33)--kubernetes云原生应用开发-总结
  8. 如何修改文件格式(win10)
  9. 对话 IJCAI 07「卓越研究奖」得主 Alan Bundy :理解智能的本质是 AI 发展的终极目标
  10. 中央电大c 语言程序设计本科试题,中央电大本科C语言程序设计试题2013年1月.pdf...
  11. iOS 7如何解决相册无法访问的问题?
  12. FireStart教程:基于SharePoint的出差报销流程一
  13. 微信小程序中商品列表 不显示
  14. thinkphpJWT
  15. Unity(12)-场景切换
  16. 天道酬勤,51CTO助我走向成功!【与51CTO的故事】
  17. 3、JavaWeb中Service层的作用、MyBatis的重要组件、mybatis-config.xml中的别名映射、properties配置、#{}和${}的区别、获取插入数据的主键值
  18. 计算机信息技术对医院医疗服务工作的影响,计算机在医院信息管理工作中应用探究.doc...
  19. 原生js实现跑马灯效果,鼠标放下可以停止跑动
  20. 激光SLAM理论与实践 第二次作业(里程计标定)

热门文章

  1. 2021芜湖高考成绩查询,2021芜湖市地区高考成绩排名查询,芜湖市高考各高中成绩喜报榜单...
  2. Node.js 用户注册功能的实现
  3. 传递function_JS中!function(){}()的理解
  4. MySQL只有80端口开放_Centos 开放80端口
  5. java解析xml乱码_大神们,我用DOM4j解析xml文档时,中文乱码
  6. html非封闭标签,自封闭的html标签
  7. 20190818:(leetcode习题)反转字符串整数反转
  8. android 4.4.4版本拍照预览,在Android5.1及以下版本的手机上无法预览
  9. java ssdb查询_java连接ssdb数据库
  10. 【引用】使用CommonDialog的ShowSave后如何判断是保存还是取消?