本帖最后由 人工智能 于 2018-8-6 17:50 编辑
为了Python的自学党们,黑马真的是拼了!我们不仅有“人工智能+Python学习路线图”,还根据以往的经验,总结出学习Python中遇到的技术问题,想详细了解,从此贴开始吧!!!
python中什么是生成器
概念: 一边循环一边计算的机制,称为生成器:generator 生成器不保存数据,保存的是状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束 记住上一次返回时在函数体中的位置。对生成器函数的后续调用跳转至暂停的位置,而上次调用的所有局部变量都保持不变。 构建: 生成器表达式: gen= (x for x in range(100)) 生成器函数: 在函数中使用yield关键字 生成器函数包含一个或者多个yield 当调用生成器函数时,将返回一个对象,但是不会立刻向下执行 像__iter__()和__next__()方法等是自动实现的,所以我们可以通过next()方法对对象进行迭代 一旦函数被yield,函数会暂停,控制权返回调用者 局部变量和它们的状态会被保存,直到下一次调用 函数终止的时候,StopIteraion会被自动抛出 优点: 1,更容易使用,代码量较小 2,内存使用更加高效。比如列表是在建立的时候就分配所有的内存空间,而生成器仅仅是需要的时候才使用,更像一个记录 3,代表了一个无限的流。如果我们要读取并使用的内容远远超过内存,但是需要对所有的流中的内容进行处理,那么生成器是一个很好的选择,比如可以让生成器返回当前的处理状态,由于它可以保存状态,那么下一次直接处理即可
生成器方法: close() send() throw() yieldfrom
使用: 1,next(generator) 2,generator.__next__() 3,while True中迭代要捕获异常 4,for循环中迭代会自动处理异常 5,在生成器函数中使用return会使生成器终止并抛出StopIteration异常,return的返回值会作为异常的描述信息
总结: 1,第一次执行next(generator)时,会执行完yield语句后程序进行挂起,所有的参数和状态会进行保存。再一次执行next(generator)时,会从挂起的状态开始往后执行。在遇到程序的结尾或者遇StopIteration时,循环结束。 5,next()等价于send(None) 6,不同的生成器对象是彼此独立的
你想要的传送门:
|