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文件句柄. 可迭代协议: 可以被迭代要满足的要求就叫做 ...
随机推荐
- Python运维开发基础-概述-hello world
Hello World 任何一门计算机语言几乎都是从hello world开始的,为了遵从这一优秀的传统习惯,我们也从打印hello world开始. linux系统进入Python环境,直接打Pyt ...
- docker~docker-machine的介绍
回到目录 国外的hub.ducker.com速度确实有些慢,还好,有咱们的阿里云,今天和大家聊聊通过添加docker-machine来改变docker的hub服务器,最终来加速咱们下载镜像的速度! 工 ...
- Palindrome 回文数
回文数,从前到后,从后到前都一样 把数字转成字符串来处理 package com.rust.cal; public class Palindrome { public static boolean i ...
- selenium3.x 踏坑记
Selenium 3.x 出来也有段时间了,有哪些坑呢? 有好长一段时间没有用selenium了.最近想用来做个web自动化的小工具.根据以往经验,firefox是不需要下载driver的.启动fir ...
- Java大数据应用领域及就业方向
最难毕业季,2017高校毕业生达到795万,许多学生面临着毕业即失业的尴尬.面对着与日俱增的竞争形势和就业压力,很多毕业生选择去知了堂学习社区镀金,以提高自己的就业竞争力,其中Java大数据是学生选择 ...
- 点击<tr>表格行元素进行跳转
意外发现table中利用<a>标签控制tr的行为无效. 尝试<a>标签在table中的使用,只有在<td><a href="">&l ...
- Hexo博客添加SEO-评论系统-阅读统计-站长统计
原文地址:→传送门 写在前面 在五月出捣腾了一把个人博客,但是刚开始只做了一些基础设置,套路也没摸清,基础安装篇请看hexo从零开始到搭建完整,里面讲到了基础工具的安装及blog项目的文件夹含义,以及 ...
- vue2 和 webpack 配置环境使用
http://blog.csdn.net/fungleo/article/details/53171052
- 斜率优化dp
转载自http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i]的形 ...
- 调皮的QQ音乐API:修复无法获取歌单
上一篇完整版:http://www.cnblogs.com/TwilightLemon/p/7076938.html QQ音乐的API真是太调皮了,获取歌单的API又更换了好多次,喵喵喵 旧版API( ...