from collections import Iterable, Iterator

1. 可迭代(iterable)对象

参考官网链接

class I:
def __init__(self, v):
self.v = v def __iter__(self):
return iter([self.v]) # 返回的应该是迭代器对象 i = I(2)
print(isinstance(i, Iterable), isinstance(i, Iterator)) # True False
print(iter(i)) # <list_iterator object at 0x00000000021C8358> class I:
def __init__(self, v):
self.v = v def __getitem__(self, item):
if item > self.v:
raise IndexError
return item i = I(2)
print(isinstance(i, Iterable), isinstance(i, Iterator)) # False False
print(iter(i)) # <iterator object at 0x0000000001DFCD30>

2. 迭代器(iterator)

参考官网链接

class I:
def __init__(self, v):
self.v = v def __iter__(self):
return self def __next__(self):
if self.v < 10:
self.v += 1
return self.v
raise StopIteration i = I(2)
print(isinstance(i, Iterable), isinstance(i, Iterator)) # True True
print(iter(i)) # <__main__.I object at 0x00000000021E0898>

3. 生成器(generator)

参考官网链接

class I:
def __init__(self, v):
self.v = v def __iter__(self):
yield 1 i = I(2)
print(isinstance(i, Iterable), isinstance(i, Iterator)) # True False
print(iter(i)) # <generator object I.__iter__ at 0x00000000022204C0>

4. 总结

  1. 只要实现了__iter__方法或者__getitem__方法, 就是iterable, 但Iterable只检测__iter__方法是否实现, 参见官网链接。推荐使用iter是否返回迭代器判断可否可迭代。
  2. __getitem__方法的返回有特殊要求, 参见官网链接
  3. 实现了__iter__和__next__方法就是一个iterator。参见pep234
  4. generator是返回一个generator iterator的函数。与普通函数的不同在于函数中包含 yield 表达式。

5. 其他参考

  1. Python可迭代与迭代器
  2. 迭代器

Python中的迭代器、生成器的更多相关文章

  1. python中的迭代器 生成器 装饰器

    什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,_ ...

  2. python中的迭代器&&生成器&&装饰器

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

  3. python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器

    1. is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同 == 比较的是两个对象的内容是否相等 2. with语句时用于对try except finally 的优 ...

  4. python中的迭代器与生成器

    迭代器 迭代器的引入 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,那么有几种方式? 1.通过索引取值 ,如了l[0],l[1] 2.通过for循环取值 fo ...

  5. Python中的迭代器和生成器

    本文以实例详解了python的迭代器与生成器,具体如下所示: 1. 迭代器概述: 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...

  6. Python中的列表生成器,迭代器的理解

    首先,思考一个问题,比如,我们想生成0-100的列表,我们怎么做? 当然,可以写成 list1=[1,2,3...,100] 可以看出,这种方法不适合生成长的列表,那么Python中就可以利用已有的列 ...

  7. python中的迭代器和生成器学习笔记总结

    生成器就是一个在行为上和迭代器非常类似的对象.   是个对象! 迭代,顾名思意就是不停的代换的意思,迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次“迭代”,而 ...

  8. 终于理解Python中的迭代器和生成器了!

    迭代器和生成器 目录 迭代器和生成器 可迭代对象和迭代器 基础概念 判断 for循环本质 不想用for循环迭代了,如何使用迭代器? 列表推导式 生成器Generator 概念 如何实现和使用? 生成器 ...

  9. python 中的迭代器和生成器简单介绍

    可迭代对象和迭代器 迭代(iterate)意味着重复,就像 for 循环迭代序列和字典那样,但实际上也可使用 for 循环迭代其他对象:实现了方法 __iter__ 的对象(迭代器协议的基础). __ ...

  10. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

随机推荐

  1. 用tar命令把目标压缩包解压到指定位置

    linux下tar命令解压到指定的目录 : #tar zxvf /bbs.tar.zip -C /zzz/bbs    //把根目录下的bbs.tar.zip解压到/zzz/bbs下,前提要保证存在/ ...

  2. [python]关于函数传入参数

    在传入参数时有两个特殊参数,*args,**kwargs,功能如下: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ' ...

  3. java中获取远程ip的一个坑

    发现在高请求量的时候获取hostName慢,后发现getHostName方法慢导致的:需要获取hostName为获取ip的方式了:java 中 InetSocketAddress // remoteA ...

  4. systemctl启动tomcat后,jps看不到进程

    centos7 写了tomcat的启动脚本,脚本从网上copy的. [Unit]Description=tomcat-1After=syslog.target network.target remot ...

  5. jquery中text、html的区别

  6. LVS负载均衡

    1.LVS负载均衡 实现LVS负载均衡转发方式有三种,分别为NAT.DR.TUN模式,LVS均衡算法包括:RR(round-robin).LC(least_connection).W(weight)R ...

  7. Taro之使用百度地图

    适配h5的时候要使用地图功能获取位置,选取了百度地图.首先在index.html文件引入. <script type="text/javascript" src=" ...

  8. Django启动报错笔记

    NO.1: You have 15 unapplied migration(s). Your project may not work properly until you apply the mig ...

  9. python 练习题(1-15)

    1.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 2.生成双色球 3.逻辑运算(运算符优先级) 4.输入一个整数,判断这个数是几位数 5.用while循环计算 1-2+3-4...-9 ...

  10. ADDED、ADDED_TO_STAGE、REMOVED、REMOVED_FROM_STAGE这几个事件的区别

    var _container:Sprite = new Sprite(); _container.addEventListener(Event.ADDED,onAdded); _container.a ...