今天主要学习了

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 生成器和各种推导式的更多相关文章

  1. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

  2. Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数

    Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: ​ 就是迭代器 生成器产生的方式: ​ 1.生成器函数

  3. Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表 ...

  4. python之生成器和列表推导式

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

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

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

  6. 【python】 迭代器、生成器、列表推导式

    一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...

  7. Python_迭代器、生成器、列表推导式,生成器表达式

    1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...

  8. python 生成器和各种推导式

    ##################################总结############################### 什么是迭代器? 可迭代对象通过__iter__()可以转换成迭代 ...

  9. python全栈开发day13-迭代器、生成器、列表推导式等

    昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__ ...

随机推荐

  1. ThinkPHP 日志(如何学好一门技术,教学视频和文档的优缺)

    ThinkPHP 日志(如何学好一门技术,教学视频和文档的优缺) 一.总结 一句话总结:教学视频中介绍的只是基础的最常用的使用,那些不常用的那些视频里面都不会介绍,因为需求小,所以还是需要好好去把参考 ...

  2. windows10 64bit 下的tensorflow 安装及demo

    目前流行的深度学习库有Caffe,Keras,Theano,本文采用谷歌开源的曾用来制作AlphaGo的深度学习系统Tensorflow. 1:安装Tensorflow 最早TensorFlow只支持 ...

  3. 百度Apollo学习(一)

    产品介绍 Nuvo-5095GC为工业电脑打开了新的篇章.作为首款面向CUDA计算.自动驾驶.深度学习及虚拟现实等新兴领域的嵌入式工控机,Nuvo-5095GC是一个高度集成.体积紧凑.稳定可靠的高性 ...

  4. 雷林鹏分享:XML - E4X

    XML - E4X E4X 向 JavaScript 添加了对 XML 的直接支持. E4X 实例 var employees= Tove 32 Jani 26 ; document.write(em ...

  5. Python自学:第二章 使用制表符或换行符来添加空白

    print("Languages:\n\tPython\n\tC\n\tJava") 输出为: Languages: Python C Java

  6. LeetCode--496--下一个更大元素I(java)

    给定两个没有重复元素的数组 nums1和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更大 ...

  7. jquery父、子、兄弟节点查找

    js var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 var ch ...

  8. SQLServer2012数据库降级至SQLServer2008R2的方法

      一.  背景 因为对方的客户的服务器安装的数据版本2012,公司开发同事需要客户数据库的备份数据,但是公司数据版本是2008R2的,无法还原. 由于2012备份无法直接还原至2008R2(MSSQ ...

  9. 51nod1647 小Z的trie

    题意:给你n个字符串,m次查询,每次问你第p个字符串的s到t的字符串在n个字符串建成的字典树上出现了多少次 题解:先建出字典树,在字典树上拓展sam,记录每个子串的出现次数.查询时只需找出在字典树上的 ...

  10. spring boot(二十)使用spring-boot-admin对服务进行监控

    上一篇文章<springboot(十九):使用Spring Boot Actuator监控应用>介绍了Spring Boot Actuator的使用,Spring Boot Actuato ...