python---生成器、迭代器
# -*- 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---生成器、迭代器的更多相关文章
- python 生成器 迭代器
阅读目录 一 递归和迭代 二 什么是迭代器协议 三 python中强大的for循环机制 四 为何要有for循环 五 生成器初探 六 生成器函数 七 生成器表达式和列表解析 八 生成器总结 一 递归和迭 ...
- day6学python 生成器迭代器+压缩文件
生成器迭代器+压缩文件 readme的规范 1软件定位,软件的基本功能2运行代码的方法:安装环境,启动命令3简要的使用说明4代码目录结构说明,更详细点可以说明软件的基本原理5常见问题说明 ====== ...
- Python 生成器, 迭代器, 可迭代对象的区别
1.可迭代对象 在python中, 一切皆对象, 但凡是可以用for循环进行遍历取值的对象都可以称之为可迭代对象, 可迭代对象在程序的一个执行周期中,可以无限轮次的进行循环遍历 2.迭代器 a.一个可 ...
- python 生成器 迭代器 yiled
文章来源:http://python.jobbole.com/81911/ https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449 ...
- 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 ...
- python 生成器&迭代器
列表生成式 要生成[1x1, 2x2, 3x3, ..., 10x10]>>> [x * x for x in range(1, 11)]for循环后面还可以加上if判断>&g ...
- Python 生成器 (generator) & 迭代器 (iterator)
python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...
- python高级之生成器&迭代器
python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...
- Python之迭代器和生成器
Python 迭代器和生成器 迭代器 Python中的迭代器为类序列对象(sequence-like objects)提供了一个类序列的接口,迭代器不仅可以对序列对象(string.list.tupl ...
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
随机推荐
- Android光线传感器-android学习之旅(65)
主要讲解光线传感器的使用,其实所有的传感器用法类似 主要是定义一个TextView用来显示光线强度,用完了以后记得在OnDestory里面释放资源 代码如下 public class MainActi ...
- SQL2008清除数据库日志脚本
--数据库名称sjjhzx,日志文件名称ksoa_zuizhong_Log' USE sjjhzx GO ALTER DATABASE sjjhzx SET RECOVERY SIMPLE ...
- 如何设计一个web容器
开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探 ...
- FSM之SMC使用总结
FSM之SMC使用总结 Part1: Smc.jar state machine compiler usage Reference: http://smc.sourceforge.net/ ...
- android升级后错误:Unable to execute dex: java.nio.BufferOverflowException.Check
Android SDK Tools升级为22.3,Android SDK Platform-tools 升级为19后,编译工程出现错误: Unable to execute dex: java.nio ...
- 理解WebKit和Chromium:Chromium资源磁盘缓存
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 想象一下,如果没有磁盘缓存的世界.当用户访问网页的时候,每次浏览器都需要从网站下载网页,图片,JS等资源 ...
- 【一天一道LeetCode】#24. Swap Nodes in Pairs
一天一道LeetCode系列 (一)题目 Given a linked list, swap every two adjacent nodes and return its head. For exa ...
- Android中的Message机制
对于Android的Message机制主要涉及到三个主要的类,分别是Handler.Message.Looper:首先对每个类做一个简单介绍:然后再介绍所谓的Android的Message机制是如何实 ...
- Oracle Applications DBA 基础(二)
6.OAM及系统管理 2014年9月13日 20:40 参考资料: 1.Oracle Applications System Administrator's Guide - Configuration ...
- 关于Service中bindService注意的几个问题
最近有用到Activity需要不断的从Service中获取数据,第一个想法肯定就是通过bind回调机制了,有几点概念模糊特此记录下: 单独使用bindService(),unbindService() ...