13:迭代器、生成器部分

课前知识点:

1、dir([])   告诉我列表(或者其他)的所拥有的方法

2、__iter__:只要是能被for循环的数据类型,就一定拥有__iter__方法

3、迭代器:一个列表执行了__iter__()之后的返回值就是一个迭代器

4、iterable:可迭代的,只要含有__iter__方法就是可迭代的

迭代器

迭代器的概念:

1、内部含有__next__和__iter__的就是迭代器------------迭代器协议

2、可迭代协议:

    可以用for循环的都是可迭代的

       可迭代的内部都有__iter__方法

    只要是迭代器,就一定可迭代

3、【可迭代的】.__iter__方法就可以得到一个迭代器

  迭代器中的__next__方法可以一个一个的获取值

4、for  循环其实就是在使用迭代器

   iterator  :迭代器

5、关于for:只有是可迭代对象的时候,才能用for

  当我们遇到一个新的变量,不确定能不能用for循环的时候,就判断它是否可以迭代

l=[1,2,3,4,5,6]
for i in l:
pass
iterator=l.__iter__() #iterator是l用__iterator
while True:
print(iterator.__next__())

6、迭代器的好处:

    从容器类型中一个一个的取值,会把所有的值都取到。

    节省内存空间:迭代器并不会在内存中再占用一大块

           内存,而是随着循环,每次生成一个,每次next循环每次给一个值。

生成器函数

1、只要是含有yield关键字的函数都是生成器函数

  yield不能和return 公用且需要写在函数内

  

def aaa():
    print(222)
    yield 111

ret=aaa()     #ret  是执行之后返回得到的生成器
print(ret)
print(ret.__next__())

2、含有yield  ,在执行之后会得到一个生成器作为返回值

3、

    

#娃哈哈%i
def wahaha():
    for i in range(2000000):
        yield '娃哈哈%s'%i           #使用yield,执行之后返回值是一个生成器函数


g = wahaha()
count = 0                           #计数功能:在执行50次之后停止
for i in g:               #对  g   生成器进行循环
    count +=1
    print(i)
    if count > 50:
        break                       #50次之后停止
# print('*******',g.__next__())     #停止之后执行__next__:继续执行上一次50次停止的函数
#说明生成器是一次一次执行的 for i in g:               #继续循环执行生成器,还是接着上次执行:还是说明 count +=1              #生成器是一次一次执行的 print(i) if count > 100: break

 

posted @ 2018-01-02 20:28  王二黑  阅读(147)  评论(0编辑  收藏  举报