# -*- coding:utf-8 -*-
# LC
# 列表生成式
def func(x):
print(x)
return 2*x
print([ func(i) for i in range(10) ]) a = [ i*2 for i in range(1000000000000)] #此列表生成式会占用大量内存空间,在没有调用的情况下,列表已经存在于内存中
len(a)
# 生成器
b = ( i*2 for i in range(1000000000000)) #生成器,只有在调用b的时候,才会按着规则进行运算,将结果返回给b,使用的时候才占用内存,速度快
#生成器不支持切片
b[100] #这种无法直接取出来
for i in b:
print(i) #生成器
#1.只有在调用的时候,才会生成相应的数据
#2.只记录当前的位置
#3.只有一个__next()__方法 #fibnacci函数
#函数生成器,使用yield,用了yield的函数,就不在是一个函数,而是一个生成器
def fib(max):
n,a,b = 0,0,1
while(n<max):
n += 1
yield b #yield是会返回当前值给函数,执行一次,__next__方法会调用yeild值
a,b = b,a+b
return "---done---"
from collections import Iterator f = fib(1)
print("-------",isinstance(f,Iterator))
while True:
try:
g = f.__next__()
print("function generator:",g)
except StopIteration as e:
print("Generator is stop,value is ",e.value)
break
#send 会唤醒当前生成器,并传递一个值给yeild def consumer(name):
print("%s 准备开始吃包子了"%name)
while True:
baozi = yield
print("包子{%s}来了,{%s}请吃吧!"%(baozi,name)) def producer(name):
c1 = consumer("A") #此步骤仅是将函数变成生成器,而生成器不会执行,如果要执行则需要调用__next__方法,__next__方法遇到yield则中断
c2 = consumer("B")
next(c1) #等于c1.__next__()方法
next(c2)
print("%s 做包子了"%name)
for i in range(6):
print("包子[%s]好了,分成两份"%i)
c1.send(i)
c2.send(i) producer("lvcheng") #1. 函数的执行流程是按着顺序执行,遇到return和最后一行的时候函数才结束执行,生成器是在每次调用__next__()的时候,在遇到yield语句的时候返回,并在下一次调用的时候,继续在上一次yield执行的位置继续
#2. 可以通过for循环的对象称为可迭代对象,可以通过isinstance()判断一个对象是否为可迭代对象,列表,元组,字典,字符串都是可迭代对象,而整数则不是
from collections import Iterable #导入Iterable可以判断一个对象是否为可迭代对象
print(isinstance([],Iterable)) #True
print(isinstance({},Iterable)) #True
print(isinstance((),Iterable)) #True
print(isinstance("abcd",Iterable)) #True
print(isinstance((x for x in range(10)),Iterable)) #True
print(isinstance(100,Iterable)) #False #迭代器
#1. 可以被next()函数调用并不断返回下一个值的对象称为迭代器
#2. 可以同isinstance()判断一个对象是否是Iterator
#3. 生成器都是迭代器,但列表,字符串,字典等不是迭代器,可以使用iter()函数变成迭代器
from collections import Iterator
print(isinstance((x for x in range(10)),Iterator)) #True
print(isinstance([],Iterator)) #False
print(isinstance(iter([]),Iterator)) #True

python---生成器、迭代器的更多相关文章

  1. python 生成器 迭代器

    阅读目录 一 递归和迭代 二 什么是迭代器协议 三 python中强大的for循环机制 四 为何要有for循环 五 生成器初探 六 生成器函数 七 生成器表达式和列表解析 八 生成器总结 一 递归和迭 ...

  2. day6学python 生成器迭代器+压缩文件

    生成器迭代器+压缩文件 readme的规范 1软件定位,软件的基本功能2运行代码的方法:安装环境,启动命令3简要的使用说明4代码目录结构说明,更详细点可以说明软件的基本原理5常见问题说明 ====== ...

  3. Python 生成器, 迭代器, 可迭代对象的区别

    1.可迭代对象 在python中, 一切皆对象, 但凡是可以用for循环进行遍历取值的对象都可以称之为可迭代对象, 可迭代对象在程序的一个执行周期中,可以无限轮次的进行循环遍历 2.迭代器 a.一个可 ...

  4. python 生成器 迭代器 yiled

    文章来源:http://python.jobbole.com/81911/ https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449 ...

  5. python生成器&迭代器

    列表生成式 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 里每个值都加一 普通做法 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]for index,i in e ...

  6. python 生成器&迭代器

    列表生成式 要生成[1x1, 2x2, 3x3, ..., 10x10]>>> [x * x for x in range(1, 11)]for循环后面还可以加上if判断>&g ...

  7. Python 生成器 (generator) & 迭代器 (iterator)

    python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...

  8. python高级之生成器&迭代器

    python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...

  9. Python之迭代器和生成器

    Python 迭代器和生成器 迭代器 Python中的迭代器为类序列对象(sequence-like objects)提供了一个类序列的接口,迭代器不仅可以对序列对象(string.list.tupl ...

  10. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

随机推荐

  1. SDK目录结构

    android sdk里的各目录作用 AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机. SDK Manager.exe:sdk管理工具,用于管理.下载sdk.sdk工具,能及扩展 ...

  2. Android进阶(二十五)setTextColor()的参数设置方式

    setTextColor()的参数设置方式 查了下资料发现setTextColor()的参数可以写成以下形式: 直接使用颜色值 setTextColor(0xFF0000FF);//0xFF0000F ...

  3. HBase作为存储方案

    HBase存储特点 * Client 1. 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息. * Zookeeper: 1. 选举集群中的Master, ...

  4. 取KindEditor中的textarea的值区不到的解决方案,固定kindEditor的高度

     可以通过下面的方式取到textarea的值 var content = $(document.getElementsByTagName('iframe')[0].contentWindow.do ...

  5. SQL Server扫盲系列——安全性专题——SQL Server 2012 Security Cookbook

    由于工作需要,最近研究这本书:<Microsoft SQL Server 2012 Security Cookbook>,为了总结及分享给有需要的人,所以把译文公布.预计每周最少3篇.如有 ...

  6. Dynamics CRM EntityCollection 根据实体中的某个字段为依据去除重复数据

    CRM中通过QueryExpression查询出了一个EntityCollection集,但有时会存在重复数据,QueryExpression中有个属性distinct,只要设置为true就能过滤 ...

  7. Ubuntu 14 安装MySQL指南

    ubuntu 14 安装MySQL指南安装MySQLsudo apt-get install mysql-server这个应该很简单了,而且我觉得大家在安装方面也没什么太大问题,所以也就不多说了,下面 ...

  8. Android群英传笔记——第十章:Android性能优化

    Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...

  9. Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

    接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...

  10. android驱动例子(LED灯控制)

    本例子,讲述在android2.1上完全自已开发一个驱动去控制硬件口并写应用测试该驱动,通过这样一个例子,解析android下的驱动开发流程的应用调用流程,可以说是很好的入门引导 要达到的效果:通过a ...