详解生成器、迭代器

 

 本文讲述了以下几个方面:

  1.何为迭代,何为可迭代对象,何为生成器,何为迭代器?

  2.可迭代对象与迭代器之间的区别

  3.生成器内部原理解析,for循环迭代内部原理解析

  4.可迭代对象,迭代器,生成器,生成器函数之间关系

1.迭代  

  要搞清楚什么关于迭代器,生成器,可迭代对象,前提是我们要理解何为迭代。

  第一,迭代需要重复进行某一操作

  第二,本次迭代的要依赖上一次的结果继续往下做,如果中途有任何停顿,都不能算是迭代.

  下面来看看几个例子,你就会更能理解迭代的含义。

复制代码
# example1
#
非迭代count = 0 while count < 10: print("hello world") count += 1
复制代码
复制代码
# example2
#
迭代count = 0 while count < 10: print(count) count += 1
复制代码

  例子1,仅仅只是在重复一件事,那就是不停的打印"hello world",并且,这个打印的结果并不依赖上一次输出的值。而例子2,就很好地说明迭代的含义,重复+继续。

2.可迭代对象

  按照上面迭代的含义,我们应该能够知道何为可迭代对象。顾名思义,就是一个对象能够被迭代的使用。那么我们该如何判断一个对象是否可迭代呢?

  Python提供了模块collections,其中有一个isinstance(obj,string)的函数,可以判断一个对象是否为可迭代对象。看下面实例:

复制代码
from collections import Iterable  f = open('a.txt') i = 1 s = '1234' d = {'abc':1} t = (1,2,344) m = {1,2,34,}  print(isinstance(i, Iterable))  # 判断整型是否为可迭代对象print(isinstance(s, Iterable))  # 判断字符串对象是否为可迭代对象  print(isinstance(d, Iterable))  # 判断字典对象是否为可迭代对象print(isinstance(t, Iterable))  # 判断元组对象是否为可迭代对象print(isinstance(m, Iterable))  # 判断集合对象是否为可迭代对象print(isinstance(f, Iterable))  # 判断文件对象是否为可迭代对象########输出结果#########False True True True True True
复制代码

  由上面得出,除了整型之外,python内的基本数据类型都是可迭代对象,包括文件对象。那么,python内部是如何知道一个对象是否为可迭代对象呢?答案是,在每一种数据类型对象中,都会有有一个__iter__()方法,正是因为这个方法,才使得这些基本数据类型变为可迭代。 

  如果不信,我们可以来看看下面代码片段:

 检测属性方法

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信