码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器、生成器

时间:2018-05-29 20:40:41      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:pre   语句   生成   协议   理解   数据   col   迭代   并且   

一、迭代器

  迭代的概念:

        迭代是一个重复的过程,每次重复就是一次迭代,并且每次迭代的结果是下一次迭代的初始值  

while  True : # 这只是单纯的重复 并不是迭代
    print("--->")



l = [1,2,3] #迭代
test = 0
while test < len(l):
    print(l[test])
    test+=1

  迭代器协议:

        1、迭代器协议是指: 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代。

        2、可迭代对象:实现了迭代器协议的对象 (如何实现:对象内部定义一个__iter__()方法)

        3、迭代器对象:可迭代对象执行obj.__iter__()得到的结果就是迭代器对象而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象

          4、注意:迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象

 

二、生成器

什么是生成器:可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其它数据类型需要调用自己的__iter__()方法),所以生成器就是可迭代对象

生成器分为两种形式:

1、生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果

def test():
    yield 1
    yield 2
    yield 3
g=test()
print(‘来自函数‘,g)

  

2、生成器表达式:类似列表推导,但是生成器返回按需产生结果的一个对象,而不是一次架构一个结果列表

laomuji=(‘鸡蛋%s‘ %i for i in range(10)) #生成器表达式
print(laomuji)
print(laomuji.__next__())
print(laomuji.__next__())
print(next(laomuji))#与上面laomuji.__next__()一样

  

 

      

迭代器、生成器

标签:pre   语句   生成   协议   理解   数据   col   迭代   并且   

原文地址:https://www.cnblogs.com/liutianyuan/p/9107453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!