iterable:可迭代的;iterator:迭代器;

print(dir([ ]))  #打印出列表所拥有的所有方法;

可迭代协议:只要含有__iter__方法的都是可迭代的。

迭代器协议:含有__iter__方法和__next__方法的就是迭代器。

对可迭代的对象调用__iter__方法就可以生成一个迭代器,for循环其实就是在使用迭代器。

迭代器的好处:

1、可以在容器类型中一个一个取值,会把所有的值都取到;

2、可以节省内存空间;

生成器

生成器函数:

只要含有yield关键字的函数都是生成器函数,yield功能和return功能类似,但不会结束函数。

调用生成器函数不会得到返回的具体的值,而是得到一个迭代器。

 1 import time
2 def generator1():
3 a=1
4 print('定义了变量a')
5 yield a
6 b=2
7 print('定义了变量b')
8 yield b
9 g1=generator1()
10 print(g1) #打印g1发现g1只是生成器
11 print(g1.__next__())
12 print('-'*20) #华丽的分割线
13 time.sleep(3) #sleep看清执行过程
14 print(g1.__next__())

send方法

1、取值功能上和next相同

2、只是取下一个数据时,给上一个yield位置传递一个函数

注意事项:

  #第一次使用生成器的时候,是用next取值;

  #最后一个yield不能接收外部的值

计算移动平均值__预激协程的装饰器

def wrap1(func):#在调用被装饰生成器函数的时候首先用next激活生成器
def inner(*args,**kwargs):
g=func(*args,**kwargs)
next(g)
return g
return inner @wrap1
def averager():
count=0
sum1=0.0
aver=None
while True:
term=yield aver
sum1+=term
count+=1
aver=sum1/count g=averager()
#next(g),在装饰器中调用了next方法
print(g.send(10))
print(g.send(20))
print(g.send(30))

yield from 可迭代对象a

a迭代产生的每个值都直接传递给生成器的调用者

列表推导器和生成器表达式

list1=['egg%s'% i for i in range(10) ]    #列表解析式
print(list1) laomuji=('egg%s'% i for i in range(10)) #生成器表达式
for i in laomuji:
print(i)

1、将列表推导器的[]换成()就变成了生成器表达式。
2、列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

3、Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如, sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:sum(x**2,for x in range(4))

day13-迭代器及生成器的更多相关文章

  1. day13迭代器与生成器

    三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...

  2. DAY13 迭代器与生成器

    一.迭代器 定义:器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 优点:不依赖索引,完成取值 缺点:不能计算长度,不能指定位取值(只 ...

  3. python学习 day13 迭代器,生成器,枚举对象

    一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...

  4. day13: 迭代器和生成器

    1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...

  5. python 全栈开发,Day13(迭代器,生成器)

    一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...

  6. 迭代器、生成器 day13

    一 迭代器 迭代器的由来pythone2.2引进的,是一种序列(也是一种数据类型),也是为类对象提供一个序列的入口. for 循环str list tuple dict set 文件句柄可迭代: s ...

  7. day13 python学习 迭代器,生成器

    1.可迭代:当我们打印 print(dir([1,2]))   在出现的结果中可以看到包含 '__iter__', 这个方法,#次协议叫做可迭代协议 包含'__iter__'方法的函数就是可迭代函数 ...

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

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

  9. Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器

    Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而 ...

  10. Python之模块,迭代器与生成器

    本节涉及内容: 1. 迭代器和生成器 2. 递归 3. 字符串格式化 4. 模块 内置模块 自定义模块 第三方模块 5. 序列化的模块 json pickle (一). 迭代器和生成器: 迭代器:  ...

随机推荐

  1. 【学习总结】GirlsInAI ML-diary day-11-while循环

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day11 认识while循环执行 对于while/break/continue的认识 新值替换变量 一般while语句 无 ...

  2. ReSharper 2017破解详细方法:

    VS里面,打开ReSharper的注册窗口:ReSharper ——> Help ——> License Information... Use License Server,右侧加号,点击 ...

  3. UIAutomator简介

    简介 Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的.也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期.比如 ...

  4. pycharm设置主题

    步骤很简单: 1.下载皮肤主题(jar) 去 http://www.themesmap.com/ 选择自己喜欢的主题下载 2.导入皮肤主题 导入方法:file–>Import Setting–& ...

  5. mpvue——API请求封装(小程序原生)

    前言 能用,但不是最好的方法,最好的还是fly,因为为了以后多平台的考虑,最好使用fly.js,做之前先关闭校验合法域名,因为我没在后台进行配置 后台进行配置合法域名,按着官方给的配置就OK了,这里就 ...

  6. https://oi-wiki.org/

    OI网站 https://oi-wiki.org/

  7. mysql shell 定时备份

    #!/bin/sh if [ ! -d "/data/backup" ]; then         mkdir -p /data/backup fi db_user=" ...

  8. nginx设置目录浏览及解决中文乱码问题

    在Nginx下默认是不允许列出整个目录的.如需开启此功能,先打开nginx.conf文件,在location server 或 http段中加入相关参数. http { include mime.ty ...

  9. 微信小程序wepy框架开发资源汇总

    开源项目 wepy-wechat-demo:基于wepy开发的仿微信聊天界面小程序 深大的树洞:基于wepy开发的树洞类微信小程序 wepy-demo-bookmall:微信小程序

  10. 不得不用的提高效率小技巧让你用Mac更顺手| Mac小技巧(三)

    文章内容及图片来源于:知乎,如果涉及版权问题,请联系作者删除 文章收录于:风云社区(提供上千款各类mac软件的下载) 1. 用预览给GIF删帧 我们在给文章配图或者做表情包的过程中,常需要截取 GIF ...