利用淘宝视频服务做视频网站,企业网站 自适应,舆情分析论文,网站开发必学书籍Python学习day12(生成器#xff0c;列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种#xff1a;一种是调用方法直接返回的#xff0c;一种是可迭代对象通过执行iter方法得到的#xff0c;迭代器有的好处是可以节省内存。 如果在某些情况下#xff0c;我们也… Python学习day12(生成器列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种一种是调用方法直接返回的一种是可迭代对象通过执行iter方法得到的迭代器有的好处是可以节省内存。 如果在某些情况下我们也需要节省内存,就只能自己写。我们自己写的这个能实现迭代器功能的东西就叫生成器。 Python中提供的生成器 1.生成器函数常规函数定义但是使用yield语句而不是return语句返回结果。yield语句一次返回一个结果在每个结果中间挂起函数的状态以便下次重它离开的地方继续执行 2.生成器表达式类似于列表推导但是生成器返回按需产生结果的一个对象而不是一次构建一个结果列表 生成器Generator 本质迭代器(所以自带了__iter__方法和__next__方法不需要我们去实现) 特点惰性运算,开发者自定义 生成器函数 一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值但是yield又不同于returnreturn的执行意味着程序的结束调用生成器函数不会得到返回的具体的值而是得到一个可迭代的对象。每一次获取这个可迭代对象的值就能推动函数的执行获取新的返回值。直到函数执行结束。 import time
def genrator_fun1():a 1print(现在定义了a变量)yield ab 2print(现在又定义了b变量)yield bg1 genrator_fun1()
print(g1 : ,g1) #打印g1可以发现g1就是一个生成器
print(-*20) #我是华丽的分割线
print(next(g1))
time.sleep(1) #sleep一秒看清执行过程
print(next(g1)) 生成器有什么好处呢就是不会一下子在内存中生成太多数据 假如我想让工厂给学生做校服生产2000000件衣服我和工厂一说工厂应该是先答应下来然后再去生产我可以一件一件的要也可以根据学生一批一批的找工厂拿。 而不能是一说要生产2000000件衣服工厂就先去做生产2000000件衣服等回来做好了学生都毕业了。。。 def produce():生产衣服for i in range(2000000):yield 生产了第%s件衣服%iproduct_g produce()
print(product_g.__next__()) #要一件衣服
print(product_g.__next__()) #再要一件衣服
print(product_g.__next__()) #再要一件衣服
num 0
for i in product_g: #要一批衣服比如5件print(i)num 1if num 5:break send def generator():print(123)content yield 1print(,content)print(456)yield2g generator()
ret g.__next__()
print(***,ret)
ret g.send(hello) #send的效果和next一样
print(***,ret)#send 获取下一个值的效果和next基本一致
#只是在获取下一个值的时候给上一yield的位置传递一个数据
#使用send的注意事项# 第一次使用生成器的时候 是用next获取下一个值# 最后一个yield不能接受外部的值 列表推导式和生成器表达式 l [i for i in range(10)]
print(l)
l1 [选项%s%i for i in range(10)]
print(l1) 1.把列表解析的[]换成()得到的就是生成器表达式 2.列表解析与生成器表达式都是一种便利的编程方式只不过生成器表达式更节省内存 3.Python不但使用迭代器协议让for循环变得更加通用。大部分内置函数也是使用迭代器协议访问对象的。例如 sum函数是Python的内置函数该函数使用迭代器协议访问对象而生成器实现了迭代器协议所以我们可以直接这样计算一系列值的和 sum(x ** 2 for x in range(4)) posted on 2018-08-25 17:29 SunnyHu 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/hyg19910701/p/9534774.html