Python 中的重点来了 : 迭代器 生成器
可迭代的对象:带有__iter__方法的,就是迭代器。字符串,列表,元祖,字典,集合,文件,都是可迭代的
可迭代的对象使用了__iter__方法的,就是迭代器,带有__next__,__iter__方法。
l = [1,2,3,4,6] # l被称为可迭代的对象
l1 = l.__iter__() # l1为迭代器
l1.__iter__() # 迭代器的两种方法
l1.__next__
Python 中的for循环 就是用了迭代器的原理
生成器:
1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
生成器实例:
def func():
a = 1
b = 3
print('------')
yield a
print('******')
yield b ret = func() # ret就是生成器 ,实质上就是迭代器
print(next(ret))
print(next(ret))
**执行第三次他会报错
生成器的优点:如果读取大量的内容,那么用迭代器可以减少内存,惰性计算
生成器的应用send语句 加上装饰器 贼牛逼,计算每日平均利率
def wrapper(func):
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
next(ret)
return ret
return inner @wrapper
def pjs():
total = 0
day = 0
ave = None
while True:
day_num = yield ave
total +=day_num
day += 1
ave = total / day ave = pjs()
# next(ave)
print(ave.send(10))
print(ave.send(15))
yield from 语句
正常的情况下的生成器
list =[1,2,3,4,5,6,7,8,9]
def func():
for i in list:
yield i
ret = func()
print(next(ret))
print(next(ret))
print(next(ret))
print(next(ret))
yield from语句的生成器
def func():
yield from list ret = func()
print(next(ret))
print(next(ret))
效果与上面产生的生成器是一样 的
列表推导式 与 生成器表达式
#alex 准备下十个蛋来报答egon
for i in range(1,11):
print('alex下的第%s个蛋!!!! 真厉害呀' % i) # 用列表推导式来表达:
l = [i for i in range(1,11)]
print(l)
生成器的表达是就是把列表推导式的中括号,变成小括号
#alex 准备下十个蛋来报答egon
for i in range(1,11):
print('alex下的第%s个蛋!!!! 真厉害呀' % i) # 用列表推导式来表达:
l = (i for i in range(1,11))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
完美
Python 中的重点来了 : 迭代器 生成器的更多相关文章
- Python中的可迭代对象/迭代器/For循环工作机制/生成器
本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...
- python中可迭代对象、迭代器、生成器
可迭代对象 关注公众号"轻松学编程"了解更多. 1.列表生成式 list = [result for x in range(m, n)] g1 = (i for i in rang ...
- 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】
Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- Python中的yield和Generators(生成器)
本文目的 解释yield关键字到底是什么,为什么它是有用的,以及如何来使用它. 协程与子例程 我们调用一个普通的Python函数时,一般是从函数的第一行代码开始执行,结束于return语句.异常或者函 ...
- python中的函数名,闭包,迭代器
一.函数名 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量,单纯print()出的是一个内存地址. def func(): print('你说你有点难追') print(func ...
- python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式
闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...
- Python基础_可迭代的/迭代器/生成器
介绍 可迭代的:内部实现了__iter__方法 迭代器:内部实现了__iter__,__next__方法 生成器:yield,yield from 使用 __iter__() __next__() _ ...
- python's thirteenth day for me 迭代器 生成器
迭代器: for 循环可以循环的就是可迭代对象. 可迭代对象:str, list, tuple, dict, set, range. 迭代器:f1文件句柄. 可迭代协议: 可以被迭代要满足的要求就叫做 ...
随机推荐
- java窗口按钮位置设置
java窗口按钮位置设置 代码如下: package Day08; import java.awt.BorderLayout; import javax.swing.JButton;import ja ...
- StrutsPreparedAndExcuteFilter与Interceptor
filter详解 Filter种类(可以进行那些预处理) 用户授权的Filter:Filter负责检查用户请求,对用户访问权限的控制 日志Filter:详细记录某些特殊的用户请求. 负责解码的Filt ...
- __main() 和 main() 【转】
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...
- 【Django】中间件
Middleware 这个地方把所有Request 拦截住,用我们自己的方式完成处理以后直接返回 Response.因此了解中间件的构成是非常必要的. Initializer: __init__(se ...
- JS遍历属性和方法
引用原文:http://www.cnblogs.com/lishenglyx/archive/2008/12/08/1350573.html#undefined <script language ...
- ExtJs的expand和collapse
最近在研究ExtJs的窗口组件(Ext.window),关于扩展显示expand和折叠显示collapse的一点心得记录一下,以便后查. var win2 = new Ext.window({ id ...
- Openresty使用Thrift安装步骤
最新想用Golang与Openresty相互通讯调用,使用RPC协议来实现,后来研究最终选择了Thrift:主要还是FB实现了支持Lua和Go模块,直接编译就可以成功嵌套使用,非常方便:研究了两天最后 ...
- 如何自己写一个公用的NPM包
以markdown-clear,创建过程为例,讲解整个NPM包创建和发布流程 1 如何创建一个包 1.1 创建并使用一个工程 在GitHub上新建一个仓库,其名markdown-clear clone ...
- Java编写的日历,输入年月,输出这个月的日期与星期
import java.util.Scanner; public class rili { public static void main(String[] args) { for (int g = ...
- spring集成mybatis实现mysql读写分离
前言 在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈.幸运的是目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上. ...