day13-迭代器及生成器
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-迭代器及生成器的更多相关文章
- day13迭代器与生成器
三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...
- DAY13 迭代器与生成器
一.迭代器 定义:器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 优点:不依赖索引,完成取值 缺点:不能计算长度,不能指定位取值(只 ...
- python学习 day13 迭代器,生成器,枚举对象
一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...
- day13: 迭代器和生成器
1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- 迭代器、生成器 day13
一 迭代器 迭代器的由来pythone2.2引进的,是一种序列(也是一种数据类型),也是为类对象提供一个序列的入口. for 循环str list tuple dict set 文件句柄可迭代: s ...
- day13 python学习 迭代器,生成器
1.可迭代:当我们打印 print(dir([1,2])) 在出现的结果中可以看到包含 '__iter__', 这个方法,#次协议叫做可迭代协议 包含'__iter__'方法的函数就是可迭代函数 ...
- Python_迭代器、生成器、列表推导式,生成器表达式
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...
- Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器
Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而 ...
- Python之模块,迭代器与生成器
本节涉及内容: 1. 迭代器和生成器 2. 递归 3. 字符串格式化 4. 模块 内置模块 自定义模块 第三方模块 5. 序列化的模块 json pickle (一). 迭代器和生成器: 迭代器: ...
随机推荐
- 酷炫的loading
今天分享一下,怎么通过用css写出一个酷炫的loading. meta: <meta name="viewport" content="width=device-w ...
- 【翻译】asp.net core中使用MediatR
这篇文章来自:https://ardalis.com/using-mediatr-in-aspnet-core-apps 本文作为翻译,有一些单词翻译成中文可能会有一些误解(对于读者)或者错误(对于作 ...
- Python datetime模块的介绍
datetime模块常用的主要有下面这四个类:(要清楚import datetime : 导入的是datetime这个包,包里有各种类) 1. datetime.date 用于表示年月日构成的日期 ...
- github 管理代码: code.Aliyun
阿里云代码管理,,cao,搞了半天,配置百度就可以了,我只想说代码控制可以用github桌面版管理
- magento 2 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.%
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on h ...
- 用python 发 帝国cms 文章
在e\extent下面放一个jiekou.php #!/usr/bin/env python3 # -*- coding: utf-8 -*- import time import urlli ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- MySQL防止库存超卖方法总结
订单超卖问题是涉及到库存项目的重中之重,这里我总结一下常用的方法 1.简单处理[update & select 合并](乐观锁) beginTranse(开启事务)$num = 1; try{ ...
- Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系
1. sdk platform 简单理解为系统版本 最新级别: 28:Android 9 27:Android 8.1 26:Android 8.0 25:Android 7.1 24:Android ...