迭代器和生成器

迭代器 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. Mac端博客发布工具推荐

    引子 推荐一款好用的 Mac 端博客发布工具. 下载地址 echo 博客对接 这里以cnblog为例.接入类型为metawebblog,access point可以在cnblog的设置最下边找到,然后 ...

  2. 03-树3 Tree Traversals Again(25 point(s)) 【Tree】

    03-树3 Tree Traversals Again(25 point(s)) An inorder binary tree traversal can be implemented in a no ...

  3. Mapper3中Example的高级使用方法

    http://zhuangxiaoda.leanote.com/post/Mapper3%E4%B8%ADExample%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6% ...

  4. codeforces776E

    传送门 这题看着很唬人,但实际上是道水题... f[n]通过打表或证明,可以发现就是欧拉函数,g[n]恒等于n,所以题目的意思就是让你求n的k次欧拉函数. 可以发现实际上k次欧拉函数,n的数值减小得很 ...

  5. HTML标签深入学习系列(1)——注释标签 <!-- -->

    一.HTML注释的语法 <!--注释内容--> 二.HTML注释的用处 1.普通注释(增强代码的可读性) 方便别人:方便其它程序员了解你的代码 方便自己:方便以后对自己代码的理解与修改等等 ...

  6. 【转】澄清P问题、NP问题、NPC问题

    首先,原文链接.(这篇文章让我第一次有了感谢腾讯,感谢微信,感谢微信公众号的冲动.总之,非常感谢作者的分享.) 然后:结论图如下 担心万一哪天原网站把这篇文章下线,所以原文内容复制过来. 澄清P问题. ...

  7. Unable to resolve target 'android-16'

    Just now when I imported the "android-support-v7-appcompat" to ADT,the console pointed out ...

  8. bzoj 2600 ricehub

    2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 783  Solved: 417[Submit][Stat ...

  9. Redis GEO 特性在 LBS 中的应用总结

    什么是LBS LBS(Location Based Service),基于位置的服务. Redis和GEO Redis 是最热门的 nosql 数据库之一,它的最大特点就是快.所以在 LBS 这种需要 ...

  10. initWithFrame 与 initWithCoder 、awakeFromNib 的方法理解笔记

    1. initWithFrame方法是什么? initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸). 当然,其他UI对象,也有initWithFrame方法, ...