什么是Python中的生成器?,直到遇到StopIteration异常记住上次返回时在函数体中的位置。对生成器函数的后续调用会跳转到它停止的地方,使前一次调用的所有局部变量保持不变。构建:生成器表达式:gen=(xforxinrange(100))生成器函数:在函数中使用yield关键字包含一个或多个yield的生成器函数在调用时将返回一个生成器对象,但不会立即执行向下。__iter__()和__next__()等方法是自动实现的,因此我们可以通过next()方法迭代对象。一旦函数被yield,函数将被挂起,控制权将返回到调用或局部变量,它们的状态将被保存,直到下一次调用函数终止时,StopIteraion将被自动抛出。优点:1.更易于使用,代码量更小2.内存使用效率更高。比如list在创建的时候就分配了所有的内存空间,而generator只在需要的时候才使用,更像是一条记录3,代表一个无限流。如果我们要读取和使用的内容远远超过内存,但又需要处理流中的所有内容,那么生成器是一个不错的选择。比如生成器可以返回当前的处理状态,因为它可以保存状态,下次可以直接处理。生成器方法:close()send()throw()yieldfrom使用:1、next(generator)2、generator.__next__()3、whileTrue中的迭代应该捕获异常4、for循环中的迭代会自动处理异常5.在生成器函数中使用return将导致生成器终止并抛出StopIteration异常。return的返回值会总结为异常的描述信息:1.第一次执行next(generator),执行完yield语句后程序会被挂起,所有的参数和状态都会被保存。再次执行next(generator)时,会从挂起状态开始执行。当遇到程序结束或StopIteration时循环结束。2、可以通过generator.send(arg)传入参数3、可以通过generator.throw(exception)传入异常。throw语句会消耗一个yield4,可以通过generator.close()手动关闭generator5,next()相当于send(None)6,不同的generator对象相互独立,你要的传送门:1.Python基础中的继承与派生2.Python中什么是闭包3.Python中什么是迭代4.Python中什么是生成器
