Python—函数(迭代器、生成器)

迭代器iterator

  • 可迭代协议—只要含有__iter__方法的,都是可迭代的iterable
  • 迭代器协议—内部含有__next__方法和__iter__方法的就是迭代器
  1. 只要能被for循环的数据类型,就一定拥有__iter__方法,for循环其实就是在使用迭代器
  2. 只要是迭代器就一定可以迭代
  3. 可迭代对象.__iter__() == 迭代器
  4. 迭代器中的__next__()方法可以一个一个的获取值

迭代器对象可以使用常规for语句进行遍历:

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

执行以上程序,输出结果如下:

1 2 3 4

迭代器的好处

  • 从容器类型中一个一个的取值,会把所有的值都取到
  • 节省内存空间

生成器

生成器函数本质上就是我们自己写的函数

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。

yield关键字

yield关键字和return用法相同,只要含有yield关键字的函数,都是生成器函数,yield需要写在函数内部,不可以和return同时使用,生成器函数执行后会得到一个生成器作为返回值

def generator():
    print(1)
    yield 'a'
#生成器函数 : 执行之后会得到一个生成器作为返回值
ret = generator()
print(ret)
print(ret.__next__())
#娃哈哈%i
def wahaha():
    for i in range(2000000):
        yield '娃哈哈%s'%i

count = 0
for i in g:
    count +=1
    print(i)
    if count > 50:
        break

for i in g:
    count +=1
    print(i)
    if count > 100:
        break
原文地址:https://www.cnblogs.com/NeroCl/p/8178811.html