可迭代的对象:带有__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 中的重点来了 : 迭代器 生成器的更多相关文章

  1. Python中的可迭代对象/迭代器/For循环工作机制/生成器

    本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...

  2. python中可迭代对象、迭代器、生成器

    可迭代对象 关注公众号"轻松学编程"了解更多. 1.列表生成式 list = [result for x in range(m, n)] g1 = (i for i in rang ...

  3. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

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

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

  5. Python中的yield和Generators(生成器)

    本文目的 解释yield关键字到底是什么,为什么它是有用的,以及如何来使用它. 协程与子例程 我们调用一个普通的Python函数时,一般是从函数的第一行代码开始执行,结束于return语句.异常或者函 ...

  6. python中的函数名,闭包,迭代器

    一.函数名 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量,单纯print()出的是一个内存地址. def func(): print('你说你有点难追') print(func ...

  7. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...

  8. Python基础_可迭代的/迭代器/生成器

    介绍 可迭代的:内部实现了__iter__方法 迭代器:内部实现了__iter__,__next__方法 生成器:yield,yield from 使用 __iter__() __next__() _ ...

  9. python's thirteenth day for me 迭代器 生成器

    迭代器: for 循环可以循环的就是可迭代对象. 可迭代对象:str, list, tuple, dict, set, range. 迭代器:f1文件句柄. 可迭代协议: 可以被迭代要满足的要求就叫做 ...

随机推荐

  1. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计(STL,二分)

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计(STL,二分) Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一 ...

  2. CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)

    CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆) Description 有n个函数,分别为F1,F2,...,Fn.定义 \(Fi(x)=Aix^2+Bix ...

  3. POJ 3279 枚举(思维)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10931   Accepted: 4029 Descrip ...

  4. USB的前世今生

    在人类的历史长河中,很少有一种技术或者传输标准能像USB那样跟我们的生活息息相关,甚至到了没有不行的地步.USB对于今天的人们来说,就好像是空气,是水,是我们每天必需但是又熟视无睹的东西,没有多少人知 ...

  5. jmeter连接配置带跳板机(SSH)的mysql服务器

    jmeter连接配置mysql服务器时,如果数据库服务器没有通过ssh连接,则只需要配置相应的jdbc参数就可以了,即请求域名或ip地址:3306,如果数据库服务器是通过SSH连接的,那需要通过中间远 ...

  6. VMware虚拟机下Ubuntu连不上网解决

    虚拟机:VMware® Workstation 12 Pro Ubuntu: 14.04 问题描述:电脑从公司拿到家打开Ubuntu之后,打开自带Firefox浏览器,显示连接不上网,终端下ping ...

  7. 小型 Web 页项目打包优化方案

    背景   目前团队中新的 Web 项目基本都采用了 Vue 或 React ,加上 RN,这些都属于比较重量级的框架,然而对于小型 Web 页面,又显得过大.早期的一些项目则使用了较原始的 HTML ...

  8. 【css】圆角 +文本阴影

    1.  css3 圆角 http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-border-radius.html 2. text shawdow ...

  9. POJ1975 Median Weight Bead floyd传递闭包

    Description There are N beads which of the same shape and size, but with different weights. N is an ...

  10. C#字符串格式化(摘抄的,留下来用用)

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...