迭代器和生成器
Posted hhsh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器和生成器相关的知识,希望对你有一定的参考价值。
# 迭代器的概念(优点:可遍历容器里的元素,省内存空间,随着循环生成) # 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器 # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议 # 可迭代的.__iter__()方法就可以得到一个迭代器 # 迭代器中的__next__()方法可以一个一个的获取值 # from collections import Iterable # from collections import Iterator # print(isinstance([], Iterator)) # print(isinstance([].__iter__(), Iterator)) # print(isinstance([], Iterable)) # # # print(‘__iter__‘ in dir([].__iter__())) # print(‘__iter__‘ in dir(123)) # False, int不可迭代 # # # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议 # l = [1,2,3,4] # iterator = l.__iter__() # print(iterator) # print(iterator.__next__()) # print(iterator.__next__()) # for其实就在使用迭代器 # # for i in range(10): # 等同于iter = range(10).__iter__() # print(i) # 循环执行print(iter.__next__()) # ---------------------------------------------------------------------------------------------------------------------------------------------- # #生成器就是一个迭代器,用yield,不能和return公用 # def generator(): # print(1) # yield ‘a‘
# yield ‘b‘
# yield ‘c‘
# # g = generator() # 得到一个生成器作为返回值,实际上是迭代器 # print(g) # print(g.__next__()) # 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 # def feibo(max): # n, a, b = 0, 0, 1 # while n < max: # yield b # a, b = b, a + b # n += 1 # # l = [x for x in feibo(20)] # print(l)
以上是关于迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章