Python: 生成器

原文来自FichsC

1)对于一个普通的Python函数,一般从函数的第一行开始执行,结束语return语句,异常或函数所有的语句执行完毕。一旦函数将控制权交还给调用者,就意味着全部结束。函数中做的所有工作以及保存在局部变量中的数据都将丢失。如果再次调用这个函数时,一切都将重新开始;

2)协同程序:可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始;

Python通过生成器来实现类似于协同程序的概念:生成器可以暂时挂起函数,并保留函数的局部变量数据,然后在再次调用它的时候从上次暂停的位置继续执行下去;

3)生成器所能实现的任何操作都可以由迭代器来代替:因为生成器事实上就是基于迭代器来实现的,生成器只需要一个yield语句即可,它内部自动创建__iter__()和__next__()方法;

4)将一个函数改造为生成器,说白了就是把return语句改为yield语句;

5)生成器最大的作用是:保留现场,当下一次执行函数时是从上一次结束的地方开始,而不是重头再来;

6)生成一个与reversed()相同的生成器:

def myRev(data):
    for index in range(len(data0-1,-1,-1):
        yield data[index]

range生成data的倒序索引,但不包括结尾;

>>>for i in myRev("FishC"):
       print(i,end=" ")

ChsiF





猜你喜欢

转载自blog.csdn.net/huan_126/article/details/80372847