迭代器和生成器

迭代器 iterator

(1) 迭代对象:

可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象

可以直接作用于for循环的数据类型为:

  1. 列表,字典,集合,元组,字符串...

  2. generator 带yield的函数

实例 判断哪些是可迭代对象

 
from collections import Iterable
print(isinstance('',Iterable)) #True
print(isinstance(1,Iterable)) #False
print(isinstance(True,Iterable)) #False
print(isinstance([],Iterable)) #True
print(isinstance(1.1,Iterable)) #False
print(isinstance((),Iterable)) #True
print(isinstance(set(),Iterable)) #True
 
(2) 迭代器 iterator
  1. 是快速访问集合的一种方式

  2. 迭代器提供了俩个方法 iter() 和 next()

  3. 迭代器在访问的时候 只能前进 不能后退

  4. 当数据被访问完以后 再次访问 则会抛出 StopIteration的错误

  5. 迭代器的前提 必须是一个可迭代对象

  6. 称为迭代器以后 增加了next方法进行取值 并且依然支持for循环

判断当前是否属于迭代器:

from collections import Iterator
print(isinstance([],Iterator))  #False
print(isinstance(iter([]),Iterator))  #True
 

生成器 generator

  1. 带有yield 的函数

  2. 使用列表推导式 外层使用小括号 称之为生成器

  3. 生成器 也能够使用 迭代器的 next方法 生成器也实现了迭代器的功能

(1) 使用列表推导式生成的生成器

可以使用next 并且 可以作用于for循环

myList = (x for x in range(100000000000)) #generator
用一个生产一个 并不是一次性的全部生产出来 节约资源
from collections import Iterator,Generator
myList = (x for x in range(100000000000)) #generator
myList = (x for x in range(3)) #generator
print(isinstance(myList,Iterator)) #True
print(isinstance(myList,Generator)) #True
 

(2) 带yield的函数

  1. yield

  2. next()

生成器的拆分 (后期的协程 就是基于当前的生成器 只是可以之间通过send方法进行通信 节省资源的开销 因为是单进程单线程)

 
 
#生成器拆分
def func():
    print(1)
    yield 'a'
    print(2)
    yield 'b'
    
f = func()
# print(f)
print(next(f))
print(next(f))
print(next(f))
 

每次调用next 会执行到下一个yield 位置并停止 将yield的值 进行返回

python 基础(五) 迭代器与生成器的更多相关文章

  1. python基础8 -----迭代器和生成器

    迭代器和生成器 一.迭代器 1.迭代器协议指的是对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2. ...

  2. 【Python基础】迭代器、生成器

    迭代器和生成器 迭代器 一 .迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单 ...

  3. Python基础之迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...

  4. 1.17 Python基础知识 - 迭代器和生成器初识

    可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...

  5. Python高手之路【九】python基础之迭代器与生成器

    迭代器与生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...

  6. python基础之迭代器、生成器、装饰器

    一.列表生成式 a = [0,1,2,3,4,5,6,7,8,9] b = [] for i in a: b.append(i+1) print(b) a = b print(a) --------- ...

  7. Python基础之迭代器、生成器

    一.迭代器: 1.迭代:每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值.例如:循环获取容器中的元素. 2.可迭代对象(iterable): 1)定义:具有__ite ...

  8. python基础之迭代器与生成器

    一.什么是迭代器: 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器是一个可以记住遍历的位置的对象. 迭代器的 ...

  9. 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范

    1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...

随机推荐

  1. Codeforces Round #303 (Div. 2) D. Queue —— 贪心

    题目链接:http://codeforces.com/problemset/problem/545/D 题解: 问经过调整,最多能使多少个人满意. 首先是排序,然后策略是:如果这个人对等待时间满意,则 ...

  2. Eclipse jar打包详解

    通过Eclipse下的演示工程,介绍如何打包这样的项目:要导出的类里边用到了别的jar包. 方法/步骤     1. Eclipse下的演示工程结构如下图所示,其中Task.java是当前工程运行的M ...

  3. 动态调试Android程序

    最近好几天来一直在看动态调试.首先是这一篇(http://www.52pojie.cn/forum.php?mod=viewthread&tid=293648)里面介绍了多种IDA动态调试的情 ...

  4. 51nod-1065:最小正子段和(STL)

    N个整数组成的序列a11,a22,a33,…,ann,从中选出一个子序列(aii,ai+1i+1,…ajj),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如:4,-1 ...

  5. No java virtual machine ....

    运行Eclipse提示No java virtual machine   版权声明:本文原创作者:一叶飘舟 作者博客地址:http://blog.csdn.net/jdsjlzx http://blo ...

  6. bzoj2257瓶子与燃料——最大公约数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2257 可以知道最终能够导出的燃料一定是瓶子容量的gcd的倍数,所以此题转化为求n个数中k个数 ...

  7. su命令,sudo命令,visudo命令

    一.命令su 语法 : su [-] username后面可以跟 ‘-‘ 也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户. ‘-‘ 这个字 ...

  8. JavaScript-Tool:jquery.md5.js

    ylbtech-JavaScript-Tool:jquery.md5.js 1.返回顶部 1. 引入js后 使用方法:document.write($.md5('1234')); 加密结果:81dc9 ...

  9. .NETFramework:Timers

    ylbtech-.NETFramework:Timers 1.返回顶部 1. #region 程序集 System, Version=4.0.0.0, Culture=neutral, PublicK ...

  10. 机器学习之SVM支持向量机

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 支持向量机(support vector machine),简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义 ...